Basic remains POJ - 2305 同余模 高精度处理

题意 给出B(10以内大于0)进制下 p (1000位以内)和m(9位以内) 求 p%m 在b进制下等于什么

思路: 可以计算   1e9不会溢出Int所以m在int值以内  先求m  要处理p  每次取一位模刚刚的m即可(b^n 也要不停模)

坑点 : p可能等于0  这时候要输出0

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<vector>
 4 #include<cmath>
 5 #include<iostream>
 6 using namespace std;
 7 
 8 char s1[1005],s2[600];
 9 vector<int>q;
10 int main(){
11     int b,p,m;
12     while(scanf("%d",&b)==1&&b){
13         scanf("%s%s",s1,s2);
14         int len1=strlen(s1);
15         int len2=strlen(s2);
16         long long  temp1=0,temp2=0;
17         q.clear();
18       //    cout<<s1<<" "<<s2<<endl;    
19         int zz=1;
20         for(int i=len2-1;i>=0;i--){
21             temp2+=zz*(s2[i]-'0');
22             zz*=b;
23         }
24         zz=1;
25 
26         for(int i=len1-1;i>=0;i--){
27             temp1+=(zz*(s1[i]-'0'))%temp2;
28         //    cout<<temp1<<endl;
29             temp1%=temp2;
30             zz*=b;
31             zz%=temp2;
32         }
33         //cout<<temp1<<temp2<<endl;
34         int ans=temp1%temp2;
35         //cout<<ans<<endl;
36         if(temp1==0){
37             printf("0\n");
38             continue;
39         }
40         while(ans){
41             q.push_back(ans%b);
42             ans/=b;
43         }
44         for(int i=q.size()-1;i>=0;i--){
45             printf("%d",q[i]);
46         }
47         printf("\n");
48 
49     }
50     return 0;
51 }

 

posted @ 2019-01-16 21:51  tttttttttrx  阅读(168)  评论(0编辑  收藏  举报