hdu1212 Big Number 第六届山东省赛Single Round Math (同余定

题目链接: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

题目链接 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;elsecout<<"NO"<<endl;}elsecout<<"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);elsecnt2+=(a[i]-48);}if((int)(abs(cnt1-cnt2))%11==0)cout<<"YES"<<endl;elsecout<<"NO"<<endl;}elsecout<<"NO"<<endl;}return 0;}

,如果你希望成功,以恒心为良友,以经验为参谋,以小心为兄弟,以希望为哨兵。

hdu1212 Big Number 第六届山东省赛Single Round Math (同余定

相关文章:

你感兴趣的文章:

标签云: