高精度减法
作者:
yuki_cy
,
2024-10-02 14:30:22
,
所有人可见
,
阅读 2
#include<iostream>
#include<cstring>
using namespace std;
//原数组 和 交换中介数组
char a[205],b[205],temp[205];
//转后的数字数组
int numa[205] ,numb[205];
//结果数组
int c[205];
int main(){
cin >> a >> b;
//题目已知a>b,健壮处理a<b的情况
int lena=strlen(a);
int lenb=strlen(b);
//如果a<b,就把a,b数组内的值互换
if(lena < lenb or lena==lenb and strcmp(a,b)<0){
//strcpy(x,y) 把y中的内容赋值到x中、
strcpy(temp,b);
strcpy(b,a);
strcpy(a,temp);
//变成a>b,结果是负数
cout <<'-';
}
//a-b
//转成数字数组
lena=strlen(a);
lenb=strlen(b);
for(int i=lena-1;i>=0;i--) numa[lena-i] = a[i]-'0';
for(int i=lenb-1;i>=0;i--) numb[lenb-i] = b[i]-'0';
//模拟减法
int lenc=0;
for(int i=1;i<=lena or i<=lenb ;i++){
lenc++;
if(numa[i]<numb[i]){
numa[i+1]--;
numa[i]+=10;
}
c[i]=numa[i]-numb[i];
}
//去前导0
while(lenc>1 and c[lenc]==0) lenc--;
for(int i=lenc;i>=1;i--) cout << c[i];
return 0;
}