高精度算法(大数与大数之间的减法)

高精度减法

#include<bits/stdc++.h>
using namespace std;
char s1[10090],s2[10090],s3[10090];
int a[10090],b[10090],c[10090];
int flag = 0; 
bool compare(char s1[],char s2[]){//如果s1 >= s2返回true,否则返回false 
	int u = strlen(s1),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 true;
}
int main(){
	int la,lb,lc;
	scanf("%s",&s1);
	scanf("%s",&s2);
	if(!compare(s1,s2)){//如果s1<s2,则交换 
		flag = 1;
		strcpy(s3,s1);
		strcpy(s1,s2);
		strcpy(s2,s3);
	} 
	
	la = strlen(s1);
	lb = strlen(s2);
	for(int i=0;i<la;i++) a[la-i] = s1[i] - '0';
	for(int i=0;i<lb;i++) b[lb-i] = s2[i] - '0';
	lc = max(la,lb);//相减得到的长度最多为两个数里面长度较大的 
	for(int i=1;i<=lc;i++){
		if(a[i] < b[i]){
			a[i+1]--;
			a[i] += 10;
		}
		c[i] = a[i] - b[i];
	}
	
	while(c[lc] == 0 && lc > 1) lc--; 
	if(flag) printf("-");
	
	for(int i=lc;i>0;i--) printf("%d",c[i]);
	
	return 0;
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值