2015年9月30日 星期三

[UVA] 10929 - You can say 11

題意:
給一個數字,判斷是不是11的倍數!

--------------------------------------------------

我的作法:
注意!因為位數很大(1000位數),要用string輸入,再將每個字元轉成數字。
11有兩個1,建立兩個盒子!分別代表個位數和十位數~
將輸入的數字從個位數開始交叉放進盒子,
如果盒子值是11的倍數,
那輸入的數字也是11的倍數!
例如:
12345678
8放個位數的盒子,
7放十位數的盒子,
6放個位數的盒子,
5放十位數的盒子,
4放個位數的盒子,
3放十位數的盒子,
2放個位數的盒子,
1放十位數的盒子,

所以十位數的盒子有1 + 3 + 5 + 7 = 16 ,盒子的值 = 16 * 10 = 16
個位數的盒子有 2 + 4 + 6 + 8 = 20,盒子的值 = 20
16+20=36,
36不是11的倍數!所以12345678也不是11的倍數!

再舉個例子:
5321459
9放個位數的盒子,
5放十位數的盒子,
4放個位數的盒子,
1放十位數的盒子,
2放個位數的盒子,
3放十位數的盒子,
5放個位數的盒子,

所以十位數的盒子有 3 + 1 + 5 = 9,盒子的值 = 9 * 10 = 90
個位數的盒子有 5 + 2 + 4 + 9  = 20,盒子的值 = 20
90+20=110,
110是11的倍數!所以5321459也是11的倍數!
神奇寶貝

--------------------------------------------------

/* 20150930
 * hanting
 * UVa 10929 - You can say 11
 * C++
 */
#include <iostream>
using namespace std;
#define INT(x) x-48
int main()
{
    string num;
    while(cin>>num and num!="0")
    {
        int box[2]={0};
        for(int i=0;i<num.size();i++)
        {
            if(i&1) box[1]+=INT(num[i]);
            else box[0]+=INT(num[i]);
        }
        int boxValue=box[0]+box[1]*10;
        if(boxValue%11==0)
        {
            cout<<num<<" is a multiple of 11."<<endl;
        }
        else
        {
            cout<<num<<" is not a multiple of 11."<<endl;
        }
    }

    return 0;
}

沒有留言:

張貼留言