UVA-10929-You can say 11(秦九昭算法+同餘與模算術)

原題鏈接

1000位大數取餘;

秦九昭算法+同餘與模算術;

1314 = (((1)*10+3)*10+1)*10+4

( a + b ) % n = ( ( a % n ) + ( b % n ) ) % n

( a - b ) % n = ( ( a % n ) - ( b % n ) + n ) % n       ( ( a % n ) - ( b % n ) 可能小於 n )

a * b % n = ( a % n ) * ( b % n ) % n                     ( ( a % n ) * ( b % n ) 可能會溢出,需要用long long 保存中間結果 )

 

#include <iostream>
#include <cstring>

using namespace std;

int main()
{
    string s;
    while( cin >> s && s != "0" )
    {
        int i, len = s.size();
        int ans = ( s[0]-'0' ) % 11;
        for( i=1; i<len; i++ )
            ans = ( (ans*10) % 11 + ( s[i]-'0' ) % 11 ) % 11;
        if( ans == 0 )
            cout << s << " is a multiple of 11." << endl;
        else
            cout << s << " is not a multiple of 11." << endl;

    }
    return 0;
}

 

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