【OJ】數字整除——大數運算之取餘

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) / 178,所以整個運算餘數爲 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日

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章