2010年3月21日 星期日

Problem 974 Kaprekar Numbers,卡布列克數

此題要求出範圍內的卡布列克數。若正整數 X 在 n 進位下的平方可以分割為二個數字,而這二個數字相加後恰等於 X,那麼 X 就是 n 進位下的卡布列克數,但這兩個數字其中一個數字不得為 0。

依據以上卡布列克數解說,加上這範圍不超過 40000,所以要有一些特殊條件控制分割的方法,以下為關鍵程式碼:
isPut = 0;
for (j = s; j <= e; j ++)
{
recode = j * j;
mul = 10;
for (k = 0; k < 4; k++)
{
g = 0;
while (recode / mul != 0 && recode % mul != 0)
{
if (recode / mul + recode % mul == j)
{
printf("%d\n",j);
isPut = 1;
g = 1;
break;
}
mul *= 10;
}
if (g) break;
mul *= 10;
}
}
if (!isPut)
printf("no kaprekar numbers\n");

(註:s 為開始範圍,e 為結束範圍)

By David.K

p974題目連結
回ACM題庫目錄
回首頁

沒有留言: