匯東網


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;
}


[ 2] [ 2]


 評論區  0 條評論

+ 添加評論