一、求两个高精度正数的和差积
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cmath> 5 using namespace std; 6 const int MAXN=1000; 7 char s1[MAXN],s2[MAXN]; 8 int ed1,ed2,n1,n2; 9 int num1[MAXN]; 10 int num2[MAXN]; 11 int ans[MAXN]; 12 13 void input() 14 { 15 scanf("%s%s",s1,s2); 16 ed1=strlen(s1)-1; 17 ed2=strlen(s2)-1; 18 } 19 20 void switchnum()//把字符转换为数字 21 { 22 memset(num1,0,sizeof(num1)); 23 memset(num2,0,sizeof(num2)); 24 for (int i=ed1;i>=0;i--) num1[ed1-i]=s1[i]-'0'; 25 for (int i=ed2;i>=0;i--) num2[ed2-i]=s2[i]-'0'; 26 } 27 28 void add() 29 { 30 memset(ans,0,sizeof(ans)); 31 int ed=max(ed1,ed2),carry=0; 32 for (int k=0;k<=ed;k++) 33 { 34 ans[k]=num1[k]+num2[k]+carry; 35 carry=ans[k]/10; 36 ans[k]=ans[k]%10; 37 } 38 if (carry>0) 39 { 40 ed++; 41 ans[ed]=carry; 42 } 43 for (int k=ed;k>=0;k--) cout<<ans[k];cout<<endl; 44 } 45 46 void sub() 47 { 48 /*strcmp是字符串比较函数,作用是比较字符串1和字符串2 49 如:strcmp(str1,str2); 50 strcmp("china","korea"); 51 比较的结果由函数带回。 52 (1)如果字符串1=字符串2,函数值为0。 53 (2)如果字符串1〉字符串2,函数值为一正整数 54 (3)如果字符串1<字符串2,函数值为一负整数*/ 55 memset(ans,0,sizeof(ans)); 56 int ed=max(ed1,ed2),f; 57 if (ed1==ed2) f=strcmp(s1,s2); //这里不能写成(ed1=ed2),否则会赋值 58 else{ 59 if (ed1>ed2) f=1; 60 else f=-1; 61 } 62 for (int k=0;k<=ed;k++) 63 { 64 if (f>=0) ans[k]+=num1[k]-num2[k]; 65 else ans[k]+=num2[k]-num1[k]; 66 if (ans[k]<0) 67 { 68 ans[k]+=10; 69 ans[k+1]--; 70 } 71 } 72 if (0==ans[ed]) ed--; //这里不能写成ans[ed]=0,否则会进行赋值 73 for (int k=ed;k>=0;k--) cout<<ans[k];cout<<endl; 74 } 75 76 void mul() 77 { 78 memset(ans,0,sizeof(ans)); 79 int ed=ed1+ed2; 80 for (int i=0;i<=ed1;i++) 81 for (int j=0;j<=ed2;j++) 82 { 83 ans[i+j]+=num1[i]*num2[j]; 84 if (i+j>0) 85 { 86 ans[i+j]+=ans[i+j-1]/10; 87 ans[i+j-1]%=10; 88 } 89 } 90 if (ans[ed]>9) 91 { 92 ed++; 93 ans[ed]=ans[ed-1]/10; 94 ans[ed-1]%=10; 95 } 96 for (int k=ed;k>=0;k--) 97 { 98 cout<<ans[k]; 99 } 100 cout<<endl; 101 } 102 103 int main() 104 { 105 input(); 106 switchnum(); 107 add(); 108 sub(); 109 mul(); 110 return 0; 111 }
二、求一个高精度正数和一个低精度正数的商和余数
1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 using namespace std; 5 const int MAXN=1000; 6 char a[MAXN]; 7 int num[MAXN]; 8 int b,rem; 9 10 int main() 11 { 12 scanf("%s%d",a,&b); 13 for (int i=0;i<strlen(a);i++) num[i]=a[i]-'0'; 14 rem=0; 15 bool f=false; 16 for (int i=0;i<strlen(a);i++) 17 { 18 rem=rem*10+num[i]; 19 if (rem>b) f=true; 20 if (f) cout<<rem/b; 21 rem%=b; 22 } 23 cout<<endl; 24 if (rem!=0) cout<<rem<<endl; 25 return 0; 26 }