如果一個自然數的平方數的尾部仍然爲該自然數本身,則稱其爲自守數。
例如:
5 x 5 = 25
76 x 76 = 5776
625 x 625 = 390625
下面代碼的目的是尋找出2千萬以內的所有自守數。
注意,2千萬的平方已經超出了整數表達的最大範圍,所以該程序使用了一個巧妙的方案。
如果我們仔細觀察乘法的計算過程,就會發現實際上對乘積的尾數有貢獻的環節,從而不用真正計算出整個乘積。
請分析代碼並填寫缺失的部分。
注意:請把填空的答案(僅填空處的答案,不包括題面)存入考生文件夾下對應題號的“解答.txt”中即可。
直接寫在題面中不能得分。
void main()
{
int n;
for(n=1; n<20 * 1000 * 1000; n++)
{
int n2 = n;
int m = 0;
for(;;)
{
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;
}
}
}