1. 程式人生 > >CCF NOI1035 數根

CCF NOI1035 數根


時間限制: 1000 ms  空間限制: 262144 KB

題目描述

數根是這樣定義的:對於一個正整數n,將它的各個數位上的數字相加得到一個新數,如果這個數是一位數,我們就稱之為n的數根,否則重複處理直到它成為一個一位數。
  例如,n=34,3+4=7,7是一位數,所以7是34的數根。
  再如,n=345,3+4+5=12,1+2=3,3是一位數,所以3是345的數根。
  對於輸入數字n,程式設計計算它的數根。

輸入

  輸入正整數n。

輸出

  輸出n的數根。

樣例輸入

345

樣例輸出

3

資料範圍限制

  1<=n<2^31


問題分析

  這是一個計算數根的問題

人們通常使用10進位制,對於一個10進位制整數,用除數10除(/)和取餘數(%)運算是常用的運算。這兩個運算分別是10進位制右移一位運算和取個位數運算,程式中運用十分廣泛。

程式說明

  函式numberroot()封裝了計算一個數的數根的功能。

要點詳解 把功能封裝到函式中,可以使得程式更加簡潔。要根據資料範圍限制來選用變數的型別。

100分通過的C語言程式:

#include <stdio.h>

#define BASE 10

int numberroot(int n)
{
    int temp;

    while(n >= BASE) {
        temp = n;

        n = 0;
        while(temp) {
            n += temp % BASE;
            temp /= BASE;
        }
    }

    return n;
}

int main(void)
{
    int n;

    scanf("%d", &n);

    printf("%d\n", numberroot(n));

    return 0;
}