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 }

 

转载于:https://www.cnblogs.com/ttttttttrx/p/10279641.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值