高精度加法 :
#include <iostream>
#include <cstdio>
#include <cstring>
// 高精度入门
const int MAX = 100005 ;
using namespace std ;
char s[MAX] ;
char s1[MAX] ;
int a[MAX] ,b[MAX] ,c[MAX] ;
void write(int len ,int a[]){ // 高精度输出
for(int i = len ; i>0 ; i-- ){
printf("%d",a[i]);
}
}
int compare(int lena , int lenb){ // 高精度比较
if(lena > lenb) return 1 ;
if(lena < lenb) return 0 ;
for(int i = lena ; i >0 ;i--){
if(a[i]>b[i]) return 1 ;
if(a[i]<b[i]) return 0 ;
}
return 0 ; // a <=b
}
int main(){
int lena , lenb ;
int lenc ;
scanf("%s%s",s+1,s1+1);
lena = strlen(s+1) ;
lenb = strlen(s1+1) ;
for(int i = 1 ; i<=lena ; i++) a[i] = s[lena-i+1]-'0' ;
for(int i = 1 ; i<=lenb ; i++) b[i] = s1[lenb-i+1] -'0' ;
lenc = max(lena,lenb) ;
for(int i = 1 ;i<=lenc ; i++ ){
c[i] = c[i] + a[i]+b[i] ;
c[i+1] = c[i]/10 ;
c[i] = c[i]%10 ;
}
while(c[lenc+1]>0) lenc++ ;
for(int i = lenc ; i> 0 ; i-- ) printf("%d",c[i]);
return 0 ;
}
高精度减法 :
#include<cstdio>
#include<cstring>
#include <iostream>
#include<string>
#include<cmath>
#include<algorithm>
using namespace std;
const int MAX = 1000005 ;
int a[MAX],b[MAX],c[MAX];
int lena,lenb,lenc;
char s1[MAX],s2[MAX];
int main(){
scanf("%s %s",s1+1,s2+1);
if(strcmp(s1+1,s2+1)==0 ){ // 相等直接出结果
cout<<"0"<<endl ;
return 0 ;
}
lena=strlen(s1+1);
lenb=strlen(s2+1);
if(lenb>lena||(lena==lenb&&s2>s1)){//如果第二个数比第一个数大,那么结果是负数
printf("-");
int len = max(lena,lenb) ;
char t[MAX] ={'\0'};
for(int i = 0;i<=len ; i++ ){
t[i] = s1[i] ;
}
for(int i = 0 ; i<=len ; i++){
s1[i] = s2[i] ;
}
for(int i = 0 ;i<=len ;i++ ){
s2[i] = t[i] ;
}
swap(lena,lenb);
}
for(int i=1;i<=lena;i++) a[i]=s1[lena-i+1]-'0';
for(int i=1;i<=lenb;i++) b[i]=s2[lenb-i+1]-'0';
lenc=max(lena,lenb);
for(int i=1;i<=lenc;i++){
c[i]=c[i]+a[i]-b[i];
if(c[i]<0) c[i]=c[i]+10,c[i+1] =-1;
}
while(c[lenc]==0&&lenc>1) lenc--;
for(int i=lenc;i>0;i--) printf("%d",c[i]);
}
高精度乘法:
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<algorithm>
using namespace std;
const int MAX = 100005 ;
int a[MAX],b[MAX],c[MAX];
int lena,lenb,lenc;
char s1[MAX],s2[MAX];
int main(){
scanf("%s %s",s1+1,s2+1);
if(s1[1]=='0' || s2[1]=='0'){
printf("0\n");
return 0 ;
}
lena=strlen(s1+1);
lenb=strlen(s2+1);
for(int i=1;i<=lena;i++) a[i]=s1[lena-i+1]-'0';
for(int i=1;i<=lenb;i++) b[i]=s2[lenb-i+1]-'0';
lenc=lena+lenb-1;
for(int i=1;i<=lena;i++){
for(int j=1;j<=lenb;j++){
c[i+j-1]+=a[i]*b[j];
c[i+j]+=c[i+j-1]/10;
c[i+j-1]%=10;
}
}
while(c[lenc+1]>0) lenc++;
for(int i=lenc;i>0;i--) printf("%d",c[i]);
return 0 ;
}
标签:lenc,lenb,lena,高精度,int,MAX,s1,加减,模板 From: https://blog.51cto.com/u_15970235/6063955