10億以內的自守數



如果一個自然數的平方數的尾部仍然爲該自然數本身,則稱其爲自守數。
例如:
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;  
}
}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章