酷酷的代码段

[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)