首先给出一个数n,2-9代表接下来两个数的进制,然后给出两个数,一个是1000位,是被除数,另外一个是10位,是除数,让你求出两数相除的余数输出,并且是n进制的...
这题是很久以前做的,但是每一点思路,但是学了大数相除后感觉简单多了,不用考虑商,只用求余就行
由于给出的除数是10位,所以可以把他的十进制求出来用int k存储,然后利用大数求余的公式,把被除数依次按位求余
mod=mod*n+(chu[i]-'0');mod=mod%k 注意此处乘的是n不是10,因为被除数本身不是十进制的
最后得出的k是十进制的,然后再转换回n进制的即可......
由于没有考虑余数是0情况,所以wa一次,看来考虑特殊情况灰常关键啊
code:
1 #include <stdio.h>
2 #include <string.h>
3 int main()
4 {
5 int n;
6 while(scanf("%d",&n)!=EOF,n)
7 {
8 char chu[1005],bei[15];
9 int result[15];
10 scanf("%s%s",chu,bei);
11 int l1=strlen(chu),l2=strlen(bei),k=0,mod=0,t=0;
12 for(int i=0;i<l2;i++)
13 k=k*n+(bei[i]-'0');
14 for(int i=0;i<l1;i++)
15 {
16 mod=mod*n+(chu[i]-'0');
17 mod=mod%k;
18 }
19 //printf("k=%d mod=%d\n",k,mod);
20 while(mod)
21 {
22
23 result[t++]=mod%n;
24 mod/=n;
25
26 }
27 if(t==0)printf("0");
28 else
29 for(int i=t-1;i>=0;i--)
30 printf("%d",result[i]);
31 printf("\n");
32 }
33
34 }

浙公网安备 33010602011771号