目录
一·高精度加法
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
char a_str[500];
char b_str[500];
int b[500];
int a[500];
int c[500];
int main(){
cin>>a_str;
cin>>b_str;
int lena=strlen(a_str);
int lenb=strlen(b_str);
for(int i=0;i<lena;i++){
a[i]=a_str[lena-1-i]-'0';
}
for(int i=0;i<lenb;i++){
b[i]=b_str[lenb-1-i]-'0';
}
int lenc=max(lena,lenb);
for(int i=0;i<lenc;i++){
c[i]+=a[i]+b[i];
if(c[i]>=10){
c[i+1]++;
c[i]%=10;
}
}
while(c[lenc]==0&&lenc>0)lenc--;
for(int i=lenc;i>=0;i--)cout<<c[i];
return 0;
}
二,高精度减法
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
char a_str[500];
char b_str[500];
int b[500];
int a[500];
int c[500];
int main(){
cin>>a_str;
cin>>b_str;
int lena=strlen(a_str);
int lenb=strlen(b_str);
for(int i=0;i<lena;i++){
a[i]=a_str[lena-1-i]-'0';
}
for(int i=0;i<lenb;i++){
b[i]=b_str[lenb-1-i]-'0';
}
int lenc=max(lena,lenb);
if(strcmp(a_str,b_str)<0){
cout<<"-";
swap(a,b);
}
for(int i=0;i<lenc;i++){
c[i]+=a[i]-b[i];
if(c[i]<0){
c[i+1]--;
c[i]+=10;
}
}
lenc--;
while(c[lenc]==0&&lenc>0)lenc--;
for(int i=lenc;i>=0;i--)cout<<c[i];
return 0;
}
三,高精度乘法
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
char a_str[500];
char b_str[500];
int b[500];
int a[500];
int c[500];
int main(){
cin>>a_str;
cin>>b_str;
int lena=strlen(a_str);
int lenb=strlen(b_str);
for(int i=0;i<lena;i++){
a[i]=a_str[lena-1-i]-'0';
}
for(int i=0;i<lenb;i++){
b[i]=b_str[lenb-1-i]-'0';
}
int lenc=lena+lenb;
for(int i=0;i<lena;i++){
for(int j=0;j<lenb;j++){
c[i+j]+=a[i]*b[j];
}
}
for(int i=0;i<lenc;i++){
if(c[i]>=10){
c[i+1]+=c[i]/10;
c[i]%=10;
}
}
while(c[lenc]==0&&lenc>0)lenc--;
for(int i=lenc;i>=0;i--)cout<<c[i];
return 0;
}
四,高精度除法(高精÷低精)
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
char a_str[500];
int b;
int r=0; //r是余数
int a[500];
int c[500];
int main(){
cin>>a_str;
cin>>b;
int lena=strlen(a_str);
for(int i=0;i<lena;i++){
a[i+1]=a_str[i]-'0';
}
for(int i=1;i<=lena;i++){
c[i]=(r*10+a[i])/b;
r=(r*10+a[i])%b;
}
int lenc=1;
while(c[lenc]==0&&lenc<lena)lenc++;
for(int i=lenc;i<=lena;i++)cout<<c[i];
cout<<endl<<"yu"<<r; //输出余数
return 0;
}
最后:代码还是要自己动手,光看记不住的(深有体会)。此文章是我关于高精度的写法模板,具体思路还是得探索。