【HDU】1013 數根(C語言)
阿新 • • 發佈:2019-02-10
-------本人小白一枚,剛接觸程式設計不久,有什麼問題還請大家不吝賜教-------問題描述通過總和整數的數字找到正整數的數字根。如果結果值是單個數字,那麼該數字就是數字根。如果結果值包含兩個或更多數字,則將這些數字相加並重復該過程。只要有必要獲得一個數字,就會繼續這樣做。
例如,考慮正整數24.將2和4相加產生6的值。由於6是單個數字,因此6是24的數字根。現在考慮正整數39.將3和9相加12.由於12不是單個數字,因此必須重複該過程。新增1和2個3,一個數字,也是39的數字根。
輸入輸入檔案將包含一個正整數列表,每行一個。輸入的結尾將用整數值0表示。
輸出對於輸入中的每個整數,將其數字根輸出到輸出的單獨行上。
示例輸入24390示例輸出63
例如,考慮正整數24.將2和4相加產生6的值。由於6是單個數字,因此6是24的數字根。現在考慮正整數39.將3和9相加12.由於12不是單個數字,因此必須重複該過程。新增1和2個3,一個數字,也是39的數字根。
輸入輸入檔案將包含一個正整數列表,每行一個。輸入的結尾將用整數值0表示。
輸出對於輸入中的每個整數,將其數字根輸出到輸出的單獨行上。
示例輸入24390示例輸出63
解題思路:
這道題主要包括兩個步驟
Step1:將整數的各位相加,小於9直接輸出
Step2:合大於9,考慮繼續迴圈計算,直到小於9,這裡用到的是兩重迴圈,具體見程式碼
*注意*
1.輸入的整數可以很長,所以不能用int或long這種型別,在這裡需要考慮使用字串輸入,並將字串轉為數值num += (str[i] - '0');
2.注意題幹中要求輸入結尾為0,使用迴圈:while(scanf("%s", str) && str[0]!='0')
程式碼1(Accepted)
#include <iostream> int main() { int num, ans; char str[1000]; while(scanf("%s", str) && str[0]!='0') { num = 0; for(int i=0; str[i]!='\0'; i++) num += (str[i] - '0'); while(num>9) { ans = 0; while(num) { ans += num%10; num /= 10; } num = ans; } printf("%d\n", num); } return 0; }
程式碼2(Wrong Answer)
雖然這個沒有通過,但是我認為題意要表達的就是先輸入所有整數,‘0’結束。
但實際上通過的卻是輸入一個整數,輸出一個整數的形式。(不知道是不是我哪裡理解有誤
#include <stdio.h> int main() { int num, ans; char str[1000]; int result[1000];//定義一個數組來存放結果 int x=0; //定義一個變數來存放輸出結果的個數 while(scanf("%s", str) && str[0]!='0') { num = 0; for(int i=0; str[i]!='\0'; i++) num += (str[i] - '0'); while(num>9) { ans = 0; while(num) { ans += num%10; //個位數 num /= 10; //十、百、千。。。 } num = ans; } result[x]=num; //將算出的結果存方到result陣列中 x++; //輸出結果的個數加一 } int i=0; printf("運算結果如下:\n"); for(i=0;i<x;i++) printf("%d\n", result[i]); return 0; }
這段程式碼中我認為13——22行這段二重迴圈是這道題的突破點。
------------------------------------- 我是分割線 -------------------------------------------
下面是我在做後面【1163】時用了九餘數定理,想著用九餘數定理能不能更簡單地解決這道題,結果很愉快地通過了~
程式碼:
#include <stdio.h>
int main()
{
int num,temp;
char str[1000];
while(scanf("%s", str) && str[0]!='0')
{
num = 0;
for(int i=0; str[i]!='\0'; i++)
num += (str[i] - '0');
temp=num;
temp=temp%9;
if (temp==0)
printf("9\n");
else
printf("%d\n", temp);
}
return 0;
}
大家還有什麼其他的方法,歡迎留言~