NOJ - T035
[編輯] [转简体] (简体译文)
|
作者:huidong
| 分類:【編程】NOJ 和 C 程序設計習題
[
9 瀏覽
0 評論
2 贊
2 踩
]
概要
基思数
正文
【題目片段】
是否存在无穷多个基思数仍然是个有待论证的问题,但10^19以下的基思数只有71个,比素数还稀有。
例如197,以十进制按照上面的方法建立一个序列:
1
9
7
1+9+7=17
9+7+17=33
7+17+33=57
17+33+57=107
33+57+107=197
……
因此197为基思数。
编写一个内联函数inline IsKeith(int N);,判断N是否为基思数,若是返回1,否则返回0。
【AC 代碼】
#include <stdio.h> inline int IsKeith(int N) { int pnDigits[12] = { 0 }; // 存儲 N 的每一位數 int nNum = 0; // 一共有幾位 for (int nInputTmp = N; nInputTmp && nNum < 12; nNum++, nInputTmp /= 10) if (N > 0) pnDigits[nNum] = nInputTmp % 10; // sum - 本次求和的結果 // index - 修改位置索引 for (int index = nNum - 1;; index--) { int sum = 0; for (int i = 0; i < nNum; i++) { sum += pnDigits[i]; } if (sum == N) // 成功 return 1; else if (sum > N) // 失敗 break; // 準備下一輪加和 if (index < 0) index = nNum - 1; pnDigits[index] = sum; } return 0; } int main() { int N; scanf("%d", &N); if (IsKeith(N)) printf("Yes"); else printf("No"); return 0; }