蓝桥杯之自守数

来源:互联网 发布:淘宝上的桃木 编辑:程序博客网 时间:2024/05/22 07:05

如果一个自然数的平方数的尾部仍然为该自然数本身,则称其为自守数。

例如:
5 x 5 = 25
76 x 76 = 5776
625 x 625 = 390625

下面代码的目的是寻找出2千万以内的所有自守数。

注意,2千万的平方已经超出了整数表达的最大范围,所以该程序使用了一个巧妙的方案。

如果我们仔细观察乘法的计算过程,就会发现实际上对乘积的尾数有贡献的环节,从而不用真正计算出整个乘积。

#include<cstdio>#include<algorithm>using namespace std;int main(){int n;for(n=1; n<20000000; n++)    {int n2 = n;int m = 0;while(1)        {if (n2==0){printf("%d\n", n);break;}int k = n2 % 10;m += k * n;if (m%10!=k) break;m = m / 10;n2 =n2/10;}}    return 0;}


0 0