一、求两个高精度正数的和差积
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=strcmp(s1,s2),deco=0; 57 for (int k=0;k<=ed;k++) 58 { 59 if (f>=0) ans[k]+=num1[k]-num2[k]; 60 else ans[k]+=num2[k]-num1[k]; 61 if (ans[k]<0) 62 { 63 ans[k]+=10; 64 ans[k+1]--; 65 } 66 } 67 if (0==ans[ed]) ed--; //这里不能写成ans[ed]=0,否则会进行赋值 68 for (int k=ed;k>=0;k--) cout<<ans[k];cout<<endl; 69 } 70 71 void mul() 72 { 73 memset(ans,0,sizeof(ans)); 74 int ed=ed1+ed2; 75 for (int i=0;i<=ed1;i++) 76 for (int j=0;j<=ed2;j++) 77 { 78 ans[i+j]+=num1[i]*num2[j]; 79 if (i+j>0) 80 { 81 ans[i+j]+=ans[i+j-1]/10; 82 ans[i+j-1]%=10; 83 } 84 } 85 for (int k=ed;k>=0;k--) cout<<ans[k];cout<<endl; 86 } 87 88 int main() 89 { 90 input(); 91 switchnum(); 92 add(); 93 sub(); 94 mul(); 95 return 0; 96 }
二、求一个高精度正数和一个低精度正数的商和余数
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 }
时间: 2024-10-25 18:43:04