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;
}

 

posted @ 2018-08-17 21:00  Gaojinman  阅读(187)  评论(0)    收藏  举报