1003: 數字整除
題目描述
定理:把一個至少兩位的正整數的個位數字去掉,再從餘下的數中減去個位數的5倍。當且僅當差是17的倍數時,原數也是17的倍數 。
例如,34是17的倍數,因爲3-20=-17是17的倍數;201不是17的倍數,因爲20-5=15不是17的倍數。輸入一個正整數n,你的任務是判斷它是否是17的倍數。
輸入
輸入文件最多包含10組測試數據,每個數據佔一行,僅包含一個正整數n(1<=n<=10100),表示待判斷的正整數。n=0表示輸入結束,你的程序不應當處理這一行。
輸出
對於每組測試數據,輸出一行,表示相應的n是否是17的倍數。1表示是,0表示否。
樣例輸入
34
201
2098765413
1717171717171717171717171717171717171717171717171718
0
樣例輸出
1
0
1
0
解題代碼
單純地大數除法或者說是取餘運算,代碼也非常簡單,重要的是理解小學的時候列出兩個式子進行除法運算的場景。
比如說:
178 % 17 ,首先我們應該把 運算 1 / 17
餘數爲1,接着我們運算 (1*10 + 7) / 17
,等到1餘0,最後我們運算 (0*10+8) / 17
餘8
,所以整個運算餘數爲 8
#include <iostream>
using namespace std;
int main()
{
char str[250];
while(cin>>str)
{
if(str[0]=='0') break;
int i;
int result = 0;
for(i=0; str[i]!='\0'; i++)
{
// 餘數乘以10,然後加上下一位
result *= 10;
result += (str[i]-'0');
result %= 17;
}
if(result==0) cout<<"1"<<endl;
else cout<<"0"<<endl;
}
return 0;
}
總結
這個題目只是一個例子,大數運算的取餘運算就是這樣操作的,只需要把題目中的17改成指定的數就可以了。
Smileyan
2019年9月19日