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 }

浙公网安备 33010602011771号