#include<bits/stdc++.h>
using namespace std;
const int maxn=100005;
struct asd{
int ans[maxn],len;
bool jud;
asd(){
memset(ans,0,sizeof(ans));
len=1;
jud=0;
}
asd operator +(asd &A){
asd B;
B.len=max(len,A.len);
for(int i=0;i<B.len;i++){
B.ans[i]+=A.ans[i]+ans[i];
if(B.ans[i]>=10){
B.ans[i]-=10;
B.ans[i+1]+=1;
}
}
if(B.ans[B.len]) B.len++;
return B;
}
asd operator -(asd &A) {
asd B;
bool jud=0;
if(A.len>len) jud=1;
else if(A.len==len){
for(int i=len-1;i>=0;i--){
if(A.ans[i]>ans[i]){
jud=1;
break;
}
if(A.ans[i]<ans[i]) break;
}
}
if(jud){
B.len=A.len;
for(int i=0;i<B.len;i++){
if(A.ans[i]>=ans[i]){
B.ans[i]=A.ans[i]-ans[i];
} else {
B.ans[i]=A.ans[i]-ans[i]+10;
A.ans[i+1]--;
}
}
} else {
B.len=len;
for(int i=0;i<B.len;i++){
if(ans[i]>=A.ans[i]){
B.ans[i]=ans[i]-A.ans[i];
} else {
B.ans[i]=ans[i]-A.ans[i]+10;
ans[i+1]--;
}
}
}
B.jud=jud;
return B;
}
asd operator *(asd &A){
asd B;
for(int i=0;i<A.len;i++){
for(int j=0;j<len;j++){
B.ans[i+j]+=A.ans[i]*ans[j];
}
}
for(int i=0;i<A.len;i++){
for(int j=0;j<len;j++){
if(B.ans[i+j]>=10){
B.ans[i+j+1]+=B.ans[i+j]/10;
B.ans[i+j]%=10;
}
}
}
B.len=A.len+len;
return B;
}
void read(){
char s[maxn];
scanf("%s",s);
int ll=strlen(s);
for(int i=0;i<ll;i++) ans[i]=s[ll-i-1]-'0';
len=ll;
while(ans[len-1]==0 && len-1!=0) len--;
}
void write(){
while(ans[len-1]==0 && len-1!=0) len--;
if(jud==1) printf("-");
for(int i=len-1;i>=0;i--){
printf("%d",ans[i]);
}
printf("\n");
}
};
asd a,b,c;
int main(){
a.read();
b.read();
c=a*b;//乘法
c=a+b;//加法
c=a-b;//减法
c.write();
return 0;
}
高精度加法、减法、乘法
猜你喜欢
转载自www.cnblogs.com/liuchanglc/p/13198203.html
今日推荐
周排行