2011年6月21日 星期二

d235: Q10929: You can say 11

內容 :
    你的任務是,給你一個正整數 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

5 則留言:

  1. 可以說明這程式碼嗎?

    回覆刪除
  2. 解釋第13行~第19行
    想必大家都知道(奇數位合-偶數位合)是11的倍數的話那個值一定是11的倍數。

    所以
    第15行 把奇數位的值加進來,然後把"i指到下一位數"(也就是偶數位)
    第16行 判斷如果沒有偶數位的話就可以離開了(到底了)
    第18行 減掉偶數位的數值
    最後迴圈,把i再指向奇數位,一直重複上述步驟到結束。

    不知道這樣解釋是否有回答到?

    回覆刪除
  3. 奇數位合-偶數位合這是啥意思@@?? 可以用30800 做一次嗎不好意思 麻煩高手!!!QQ

    回覆刪除
  4. 2937 ?? 2+3=5 9+7=16 5-16不等於0 @@ 但他是11倍數

    回覆刪除
  5. 剛剛懂意思了 如果不知道這檢查法的話 程式可能很難打出來@@

    回覆刪除