高精度算法 减法
减法 思路
准备工作 判断两个数的大小
1 交换两个数(s1>s2 不用交换 此步省略)
2 判断s1 s2的长度
3 转置存储s1 s2 并将他们变为int 类型
4 核心代码 s1+s2
5 删除前导0
6 倒置输出结果
//高精度减法
//只能是两个正数相减,而且要大减小
#include<stdio.h>
#include<string.h>
#include<cstring>
#include<iostream>
using namespace std;
char s1[3001],s2[3001],s3[3001];
int a[3001],b[3001],c[3001],flag=0;
bool compare(char s1[],char s2[]){
int u=strlen(s1); int v=strlen(s2);
if(u!=v) return u>v;
for(int i=0;i<u;i++){
if(s1[i]!=s2[i]) return s1[i]>s2[i];}
return false;
}
int main(){
//输出两个字符窜数
scanf("%s",s1);
scanf("%s",s2);
//进行交换数据s1 s2
if(!compare(s1,s2)){
flag=1;
strcpy(s3,s1);
strcpy(s1,s2);
strcpy(s2,s3);
}
// 判断长度 转置存储
int len1=strlen(s1);
int len2=strlen(s2);
for(int i=0;i<len1;i++)
a[len1-i]=s1[i]-'0';
for(int i=0;i<len2;i++)
b[len2-i]=s2[i]-'0';
//进行计算A-B
int len3=max(len1,len2);
for(int i=1;i<=len3;i++)
{
if(a[i]<b[i])
{
a[i+1]--;
c[i]=10+a[i];
}
c[i]=a[i]-b[i];
}
//输出结果
while (c[len3]==0&&len3>1) len3--;
if(flag==1) printf("-");
for(int i=len3;i>0;i--) {
printf("%d",c[i]);
}
return 0;
}