大数取余

来源:互联网 发布:软件开发好学吗? 编辑:程序博客网 时间:2024/05/18 11:12

//将“14689”看成多项式相加的和,即1*10^5+4*10^4+6*10^3+8*10^2+9*10^1,每一项如果看成X,Y,Z

//结合一些模运算的性质来考虑,比如,对多个数字的相加再求模和先对中间部分结果求模再相加后面的数再求模的结果是一样的

//即 (X+Y+Z)modP =((X+Y)modP+ Z)modP = ((XmodP +Y)modP+Z)modP

/*大数取余-------mod 为 (int范围)*//*  具体做法:   从大数最高位开始,只要其大于mod   就实行取余,一直下去,最终得到余数例如:123 % 4  取一个中间变量t=0      1<4  t=1    --- 2  t=1*10+2=12>4  t=t%4=0    --- 3  t=0+3=3        t=t%4=3    --------------------  余数 3*/#include<iostream>#include<string>#include<cstring>using namespace std;int MOD(string a,int mod){ int len=a.length(),i; int t=0;//中间变量,最终存储余数 for(i=0;i<len;i++) {    t*=10;    t+=a[i]-'0';    if(t>=mod)        t=t%mod; }  return t;}int main(){    string a;    int mod;  while(cin>>a>>mod)  {    cout<<MOD(a,mod)<<endl;  } return 0;}


0 0
原创粉丝点击