HDU 1013 數根(C語言)

2021-08-16 19:55:10 字數 1552 閱讀 5323

-------本人小白一枚,剛接觸程式設計不久,有什麼問題還請大家不吝賜教-------

問題描述

通過總和整數的數字找到正整數的數字根。

如果結果值是單個數字,那麼該數字就是數字根。

如果結果值包含兩個或更多數字,則將這些數字相加並重複該過程。

只要有必要獲得乙個數字,就會繼續這樣做。

例如,考慮正整數24.將2和4相加產生6的值。由於6是單個數字,因此6是24的數字根。現在考慮正整數39.將3和9相加12.由於12不是單個數字,因此必須重複該過程。

新增1和2個3,乙個數字,也是39的數字根。 輸入

輸入檔案將包含乙個正整數列表,每行乙個。

輸入的結尾將用整數值0表示。 輸出

對於輸入中的每個整數,將其數字根輸出到輸出的單獨行上。

示例輸入

24390

示例輸出

6

3解題思路:

這道題主要包括兩個步驟

step1:將整數的各位相加,小於9直接輸出

step2:合大於9,考慮繼續迴圈計算,直到小於9,這裡用到的是兩重迴圈,具體見**

*注意*

1.輸入的整數可以很長,所以不能用int或long這種型別,在這裡需要考慮使用字串輸入,並將字串轉為數值

num += (str[i] -

'0');

2.注意題幹中要求輸入結尾為0,使用迴圈:

while

(scanf

("%s"

, str) && str[

0]!=

'0')

**1(accepted)

#include int main()

num = ans;

}printf("%d\n", num);

}return 0;

}

**2(wrong answer)

雖然這個沒有通過,但是我認為題意要表達的就是先輸入所有整數,『0』結束。

但實際上通過的卻是輸入乙個整數,輸出乙個整數的形式。(不知道是不是我**理解有誤

#include int main()

num = ans;

}result[x]=num; //將算出的結果存方到result陣列中

x++; //輸出結果的個數加一

}int i=0;

printf("運算結果如下:\n");

for(i=0;i這段**中我認為13——22行這段二重迴圈是這道題的突破點。

-------------------------------------  我是分割線   -------------------------------------------

下面是我在做後面時用了九餘數定理,想著用九餘數定理能不能更簡單地解決這道題,結果很愉快地通過了~

**:#include int main()

return 0;

}

HDU 1013九餘數定理

題目傳送門 hdu1013 九餘數定理 題目描述 給定乙個數,要求你求出它的每位上的數字之和,並且直到每位上的數字之和為個位時候輸出它 輸入 乙個整數 輸出 題目描述的結果 演算法分析 此題要用到9餘數定理。九餘數定理 乙個數對九取餘後的結果稱為九餘數。乙個數的各位數字之和相加後得到的 10的數字稱...

HDU1013 水題字串 九餘數定理

題目 輸入一串數字,把各個位上的數字相加,直到剩一位數。求那一位數。例如39,3 9 12,1 2 3,結果為3.思路 簡單的字串處理。可以用九餘數定理。九餘數定理就是乙個數對九取餘,得到的數稱之為九餘數 乙個數的九餘數等於它的各個數字上的數之和的九餘數!39對9取餘,為3.過程中12對9取餘還是3...

PAT乙級C語言1013 數素數

1013 數素數 20 分 令 p i表示第 i 個素數。現任給兩個正整數 m n 10的4次方,請輸出 pm到 pn的所有素數。輸入格式 輸入在一行中給出 m 和 n,其間以空格分隔。輸出格式 輸出從 pm到 pn的所有素數,每 10 個數字佔 1 行,其間以空格分隔,但行末不得有多餘空格。輸入樣...