題目原文
題目內容
你的任務是,給你一個正整數 N,判定它是否是 11 的倍數。
輸入說明:
每列資料有一個正整數N,N 最大可能到 1000 位數。
若 N = 0 代表輸入結束
輸出說明:
對每個輸入的數,輸出是否為 11 的倍數。輸出格式請參考 Sample Output。
Sample Input
112233 30800 2937 323455693 5038297 112234 0
Sample Output
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.
解法
使用之前數學所教的奇數位的和跟偶數位的和相減看是不是11的倍數,此題建議用讀字串的方式讀入資料。
(以上資料來源:大學程式能力檢定Collegiate Programming Examination(CPE))
程式碼解答
#include <stdio.h> #include <string.h> int main() { char number[1001]; while (scanf("%s", number)!=EOF) { int i; long int length=strlen(number);///讀出字串長度 if(length==1 && number[0]=='0')///判斷是否只有一個位數並且輸入的該數不能為零 break; int odd=0, even=0; for(i=0; i<length; i++)///分別做奇偶數位的相加 { if(i%2==0) odd=odd+(number[i]-'0'); else even=even+(number[i]-'0'); } if((odd-even)%11==0)//判斷 printf("%s is a multiple of 11.\n", number); else printf("%s is not a multiple of 11.\n", number); } }
程式碼打包:解法一
沒有留言:
張貼留言