同題:UVa 10929 – You can say 11
你的任務是,給你一個正整數 N,判定它是否是 11 的倍數。
範例測資
範例輸入 | 範例輸出 |
---|---|
EOF 輸入,每列資料有一個正整數 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. |
解題思路
本題的數字會超過 Long Long Int 的範圍,所以要使用字串的方式將N收進來。
可以使用以下公式來判斷 N 是否為11的倍數:如果奇數位數的數字和與偶數位數的數字和的差是11的倍數的會N即為11的倍數。可以使用 For迴圈 將每一個位數的數字都做相加並在 For迴圈 結束後進行判斷。
範例程式碼-ZeroJudge D235: You can say 11
#include <iostream>
using namespace std;
int main() {
string str;
while (cin >> str && str != "0")
{
int odd = 0, even = 0;
for (int i = 0; i<str.length(); i++)
{
if (i % 2 == 0) even += int(str[i] - '0');
else odd += int(str[i] - '0');
}
if ((odd - even) % 11 == 0) cout << str << " is a multiple of 11.\n";
else cout << str << " is not a multiple of 11.\n";
}
}
//ZeroJudge D235
//Dr. SeanXD