你的任務是,給你一個正整數 N,判定它是否是 11 的倍數。
輸入說明 :
每列資料有一個正整數N,N 最大可能到 1000 位數。
若 N = 0 代表輸入結束
輸出說明 :
對每個輸入的數,輸出是否為 11 的倍數。
輸出格式請參考 Sample Output。
範例輸入 :
112233
30800
2937
323455693
5038297
112234
0
範例輸出 :
112233 is a multiple of 11.
30800 is a multiple of 11.
2937 is a multiple of 11.
323455693 is a multiple of 11.
5038297 is a multiple of 11.
112234 is not a multiple of 11.
出處 :
ACM 10929
程式碼 :
#include <stdio.h> #include <string.h> int main() { int i,sum; char s[1001]; while(scanf("%s",s)==1) { if(s[0]=='0' && s[1]=='\0') break; for(sum=i=0;s[i]!='\0';i++) { sum = sum + s[i++] - '0'; if(s[i]=='\0') break; sum = sum - s[i] + '0'; } if(sum%11 == 0) printf("%s is a multiple of 11.\n",s); else printf("%s is not a multiple of 11.\n",s); } return 0; }
http://zerojudge.tw/ShowProblem?problemid=d235
可以說明這程式碼嗎?
回覆刪除解釋第13行~第19行
回覆刪除想必大家都知道(奇數位合-偶數位合)是11的倍數的話那個值一定是11的倍數。
所以
第15行 把奇數位的值加進來,然後把"i指到下一位數"(也就是偶數位)
第16行 判斷如果沒有偶數位的話就可以離開了(到底了)
第18行 減掉偶數位的數值
最後迴圈,把i再指向奇數位,一直重複上述步驟到結束。
不知道這樣解釋是否有回答到?
奇數位合-偶數位合這是啥意思@@?? 可以用30800 做一次嗎不好意思 麻煩高手!!!QQ
回覆刪除2937 ?? 2+3=5 9+7=16 5-16不等於0 @@ 但他是11倍數
回覆刪除剛剛懂意思了 如果不知道這檢查法的話 程式可能很難打出來@@
回覆刪除