题目链接:http://poj.org/problem?id=1088
解释下题意,给出进制b的两个数p,m问满足p=a*m+k的最小正k值,其实我们变换下就是k=p%m
我的开始的思路就是利用字符串模拟取余的过程,没参考什么算法,写得很笨拙,完全无法模拟高精度的取余
贴下我的超时代码,可能还有问题!
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 
 | #include <iostream>#include <cstdio>
 #include <cstring>
 #include <algorithm>
 using namespace std;
 
 int main()
 {
 freopen("Input.txt", "r", stdin);
 int i,j,b,lenp,lenm;
 char p[1005],m[1005];
 while (scanf("%d",&b;)&&b;)
 {
 scanf("%s %s",p,m);
 lenp=strlen(p);
 lenm=strlen(m);
 for(i=0;i<lenp/2;i++)
 {
 char temp;
 temp=p[i];
 p[i]=p[lenp-i-1];
 p[lenp-i-1]=temp;
 }
 for(i=0;i<lenm/2;i++)
 {
 char temp;
 temp=m[i];
 m[i]=m[lenm-i-1];
 m[lenm-i-1]=temp;
 }
 while (lenp>=lenm)
 {
 for(i=0;i<lenm;i++)
 {
 j=i;
 if(p[lenp-lenm+i]<m[i])
 {
 p[lenp-lenm+i+1]--;
 while (p[lenp-lenm+j+1]<'0')
 {
 p[lenp-lenm+j+2]--;
 p[lenp-lenm+j+1]+=b;
 j++;
 }
 p[lenp-lenm+i]+=b;
 }
 p[lenp-lenm+i]-=m[i]-'0';
 }
 while (p[lenp-1]=='0')
 {
 lenp--;
 }
 p[lenp]='\00';
 }
 for(i=lenp-1;i>=0;i--)
 printf("%c",p[i]);
 printf("n");
 }
 }
 
 
 
 
 | 
代码如下:
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 
 | 
 
 
 #include <iostream>
 #include <cstdio>
 #include <cstring>
 #include <algorithm>
 using namespace std;
 
 int main()
 {
 int i,j,b,lenp,lenm;
 long int pa,mb;
 char p[1005],m[1005];
 while (scanf("%d",&b;)&&b;)
 {
 scanf("%s %s",p,m);
 lenp=strlen(p);
 lenm=strlen(m);
 pa=0;
 mb=0;
 for(i=0;i<lenm;i++)
 {
 mb*=b;
 mb+=m[i]-'0';
 }
 for(i=0;i<lenp;i++)
 {
 pa*=b;
 pa+=p[i]-'0';
 if(pa>=mb)
 pa=pa%mb;
 }
 if(pa==0)
 {
 cout<<0<<endl;
 continue;
 }
 else
 {
 i=0;
 while(pa!=0)
 {
 p[i++]=pa%b+'0';
 pa/=b;
 }
 p[i]='\00';
 lenp=strlen(p);
 for(i=lenp-1;i>=0;i--)
 cout<<p[i];
 cout<<endl;
 }
 }
 }
 
 
 |