hdu 1212 Big Number&第6回山東省試合Single Round Math(同余定理、大数型取り)


タイトルリンク:Big Number
毎回2つの数を入力して、1つ目は高精度で、2つ目の数は100000未満です;a mod bを求めます
同余の定理による:
(a+b)% c = (a%c+ b%c)%c
(a*b)%c =  ( a%c* b%c)%c
したがって、大きな数については、例えば、123はこのように分解することができる.
123 =  (1*10+2)*10 + 3; 
123 % c =   (  (  (  1%c *  10%c)%c + 2%c) %c  * 10%c) + 3 %c  ) %c;
そこで,この数を文字列で処理し,最終的な残数をループにより解いた.
【コードは以下の通り】
#include <iostream>
using namespace std;
int main()
{
    string a;
    int b;
    while(cin>>a>>b)
    {
        int len=a.length();
        int ans=a[0]-48;
        if(len>1)
        {    for(int i=1;i<len;i++)
            {
                ans=((ans*10)+a[i]-48)%b;
            }
            cout<<ans<<endl;
        }
        else 
        {
            int ans=(a[0]-48)%b;
            cout<<ans<<endl;
        }
    }
    return 0;
}

この方法があって、筆者はまた第6回山東省試合のSingle Round Mathをやりました.
タイトルリンクSingle Round Math
题目要求:2つの数を入力して、それが等しいかどうかを判断して、更に11を取り除くことができるかどうかを判定して、もしYESを出力することができるならばNOを出力します;
#include <cstring>  
#include <string>  
#include <iostream>  
using namespace std;  
int main()  
{  
    int n;  
    cin>>n;  
    string a="",b="";  
    while(n--)  
    {  
        cin>>a>>b;  
        if(a==b)  
        {  
            int len=a.length();  
            int ans=a[0]-48;  
            for(int i=1;i<len;i++)  
            {  
                ans=(ans*10+a[i]-48)%11;  
            }  
            if(ans==0)  
                cout<<"YES"<<endl;  
            else  
                cout<<"NO"<<endl;  
        }  
        else  
            cout<<"NO"<<endl;  
    }  
    return 0;  
}   
初めてこの問題をしたのは法則を見つけた--11の倍数は法則がある
すなわち、1つの数「奇数ビット」の和と、この数「偶数ビット」の和の差が11を割り切ることができれば、この数は11を割り切ることができる.
abs(num【奇数】-num【偶数】%11=0
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
	int n;
	cin>>n;
	while(n--)
	{
		string a="",b="";
		cin>>a>>b;
		if(a==b)
		{
			int cnt1=0;
			int cnt2=0;
			int len=a.length();
			for(int i=0;i<len;i++)
			{
				if(i%2)
					cnt1+=(a[i]-48);
				else
					cnt2+=(a[i]-48);
			}
			if((int)(abs(cnt1-cnt2))%11==0)
				cout<<"YES"<<endl;
			else
				cout<<"NO"<<endl;
		}
		else
			cout<<"NO"<<endl;
	}
	return 0;
}