C++高精度(比如100位的两个数) 加法 减法 乘法
加法
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 using namespace std; 5 int main(){ 6 char a[105],b[105]; 7 int c[105]={0},d[105]={0},t1,t2; 8 int z[105]={0}; 9 scanf("%s",&a); 10 scanf("%s",&b); 11 t1=strlen(a); 12 t2=strlen(b); 13 for(int i=0;i<t1;i++) c[i]=a[t1-i-1]-'0'; 14 for(int i=0;i<t2;i++) d[i]=b[t2-i-1]-'0'; 15 int t=max(t1,t2); 16 int jinwei=0; 17 for(int i=0;i<t;i++){ 18 z[i]=c[i]+d[i]+jinwei; 19 if(z[i]>=10){ 20 z[i]=z[i]-10; 21 jinwei=1; 22 } 23 else{ 24 jinwei=0; 25 } 26 } 27 if(jinwei==1){ 28 printf("1"); 29 } 30 for(int i=t-1;i>=0;i--){ 31 cout<<z[i]; 32 } 33 return 0; 34 }
减法:
#include <iostream> #include <cstdio> #include <cstring> using namespace std; char a[105],b[105]; int c[105],d[105],k[105]; int main(){ cin>>a>>b; int t1,t2; t1=strlen(a); t2=strlen(b); if(t1<t2 || (t1==t2)&&strcmp(a,b)<0){ cout<<"-"; swap(a,b); swap(t1,t2); } for(int i=0;i<t1;i++){ c[i]=a[t1-1-i]-'0'; } for(int i=0;i<t2;i++){ d[i]=b[t2-1-i]-'0'; } int t=max(t1,t2); for(int i=0;i<t;i++){ k[i]=c[i]-d[i]; if(k[i]<0){ k[i]+=10; c[i+1]-=1; } } int z=t-1; while(k[z]==0 && z>0){ z--; } for(int i=z;i>=0;i--){ cout<<k[i]; } }
乘法
1 #include<iostream> 2 #include<cstring> 3 using namespace std; 4 char a1[50001],b1[50001]; 5 int a[50001],b[50001],i,x,len,j,c[50001]; 6 int main () 7 { 8 cin >>a1 >>b1;//读入两个数 9 a[0]=strlen(a1);b[0]=strlen(b1);//计算长度
10 for (i=1;i<=a[0];++i)a[i]=a1[a[0]-i]-'0';//将字符串转换成数字 11 for (i=1;i<=b[0];++i)b[i]=b1[b[0]-i]-'0'; 12 for (i=1;i<=a[0];++i)for (j=1;j<=b[0];++j)c[i+j-1]+=a[i]*b[j];//按乘法 13 len=a[0]+b[0]; //原理进行高精乘 14 for (i=1;i<len;++i)if (c[i]>9){c[i+1]+=c[i]/10;c[i]%=10;}//进位 15 while (c[len]==0&&len>1)len--;//判断位数 16 for (i=len;i>=1;--i)cout <<c[i];//输出 17 return 0; 18 }