高精度除法和加法。Code:
1 #include<iostream>
2 #include<cstring>
3 using namespace std;
4 int main()
5 {
6 int a[20][60];
7 int i,j,k,m,n;
8 for(i=0;i<60;i++)
9 a[0][i]=0;
10 a[0][0]=1; //初始化a[0]=1000000000000000000000
11 k=0;
12 for(i=1;i<20;i++)
13 for(j=0;j<60;j++)
14 {
15 a[i][j]=(a[i-1][j]+10*k)/8;
16 k=(a[i-1][j]+10*k)%8; //k是上一位的进位,其中a[i-1][j]+10*k是i-1的数
17 }
18 char p[20];
19 int len,key,di[20],re[60];
20 while(cin>>p)
21 {
22 if(strlen(p)==1&&p[0]=='0')
23 cout<<p<<" [8] = 0 [10]"<<endl;
24 else if(strlen(p)==1&&p[0]=='1')
25 cout<<p<<" [8] = 1 [10]"<<endl;
26 else{
27 memset(re,0,sizeof(re));
28 memset(di,0,sizeof(di));
29 len=strlen(p);
30 for(i=0;i<len;i++)
31 if(p[i]=='.')
32 {
33 key=i+1;
34 break;
35 }
36 j=1;
37 for(i=key;i<len;i++)
38 di[j++]=p[i]-'0';
39 for(i=1;i<j;i++)
40 {
41 for(k=0;k<60;k++)
42 re[k]+=di[i]*a[i][k];
43 }
44 for(i=59;i>=0;i--)
45 if(re[i]>=10)
46 {
47 re[i-1]+=(re[i]/10);
48 re[i]%=10;
49 }
50 cout<<p<<" [8] = "<<"0.";
51 for(i=59;i>0;i--)
52 if(re[i]!=0)
53 {
54 for(k=i+1;k<60;k++)
55 re[k]=-1;
56 break;
57 } //把末尾的'0'标记为-1
58 for(i=1;i<60;i++)
59 {
60 if(re[i]==-1) break;
61 cout<<re[i];
62 }
63 cout<<" [10]"<<endl;
64 }
65 }
66 }
67