[C] 神奇6位数 [第五届蓝桥杯决赛高职高专组-第二题]
【题目描述】
有一个6位的正整数,它有个很神奇的性质:
分别用2 3 4 5 6去乘它,得到的仍然是6位数,并且乘积中所包含的数字与这个6位数完全一样!只不过是它们的顺序重新排列了而已。
请计算出这个6位数。
【代码段】
#include "stdio.h"
int su[]={2, 3, 5, 7, 11, 13, 17, 19, 23, 29}; //素数表
int suan(int sum)//通过素数表给数字做一个编码
{
int s = sum, re=0;
while(s)
{
re+=su[s%10];
s/=10;
}
return re;
}
/**
* 检测一个数的2、3、4、5、6倍的各位数时候和他自己一样
*/
int check(int sum)
{
int i, s = sum, first;
first = suan(s);
for(i = 2; i < 7; ++i)
{
s+=sum;
if (s/100000 == 0) return 0;
if (first != suan(s)) return 0;
}
return 1;
}
/**
* 主函数
*/
int main()
{
int i;
for(i = 100000; i < 1000000; ++i)
if (check(i)) printf("%d\n", i);
return 0;
}
【运行结果】
142857
--------------------------------
Process exited with return value 0
Press any key to continue . . .
评论(5)