题目链接:Big Number
题目大意:每次输入两个数,第一个是高精度,第二个数小于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;
}题目链接 Single Round Math
题目要求: 输入两个数,判断其是否相等 如果相等,再判定是否能够整除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的倍数是有规律的
就是如果一个数“奇数位” 的和,和 这个数“偶数位”的和的差 能够整除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;
}
hdu1212 Big Number &第六届山东省赛Single Round Math (同余定理,大数取模)
原文:http://blog.csdn.net/chaiwenjun000/article/details/45933827