一个自然数的七进制表达式是一个三位数,而这个自然数的九进制表示也是一个三位数,且这两个三位数的数码顺序正好相反,求这个三位数。

这又是一个数字问题的代码化,首先解释里面的几个概念并用数学的方法将这个三位数推导出来.
数码:数的基本单元,也就是数字.例如123和321二者分别含有三个数码,且数码顺序相反。
进制:可看作是特殊进制转换为默认进制(10进制)时的底数。
数学推导:
在这里插入图片描述
由上述数学推导过程可知,函数体内的判断条件即是七进制和九进制化为十进制时二者相等,而这需要在所有符合七进制(七和九取并集)的三位数内进行筛选,而七进制遇七进一的特点就是突破口.

	for(i=1;i<7;i++)
	for(j=0;j<7;j++)
	for(k=1;k<7;k++)
	if(i*9*9+j*9+k==i+j*7+k*7*7)

另外注意三位数的组成情况,因为二者数码顺序无论是正还是反都是正常的三位数,所以两端都不可以取0.
完整代码如下:

#include<stdio.h>
int main()
{
	int i,j,k;
	for(i=1;i<7;i++)
	for(j=0;j<7;j++)
	for(k=1;k<7;k++)
	if(i+j*7+k*7*7==i*9*9+j*9+k)
	{
		printf("这个奇异的三位数是(括号内是进制):\n");
		printf("%d%d%d(7)=%d%d%d(9)=%d(10)\n",k,j,i,i,j,k,i*9*9+j*9+k);
	}
 } 

这个题对数学知识的考察要大于C语言基础内容的考察,只要进制之间的关系搞懂,那么代码化就迎刃而解了.

猜你喜欢

转载自blog.csdn.net/RViewSonic/article/details/107127807