落谷P2142 高精度减法

题目描述
高精度减法

输入输出格式
输入格式:
两个整数a,b(第二个可能比第一个大)

输出格式:
结果(是负数要输出负号)

输入输出样例
输入:
2
1
输出:
1

说明
20%数据a,b在long long范围内

100%数据0<a,b<=10的10000次方

#include<bits/stdc++.h>
#include<cstring>
using namespace std;
int a[100011]={0},b[100011]={0},c[100011]={0};
int main(){
	
	string str1,str2;
	cin>>str1;
	cin>>str2;
	if(str1==str2){
		cout<<0;
		return 0;
	}
	int n1=str1.length();
	int n2=str2.length();
	int flag=0;
	if(n2>n1){//这一步是判断那个数长,哪个就大
		swap(str1,str2);
		flag=1;
	}
	if(n1==n2){
		for(int i=0;i<n2;++i){
			if(str1[i]-str2[i]<0){
				flag=1;
				swap(str1,str2);
				break;
			}
		}
	}
	if(flag)cout<<'-';
//	if(!(n1>n2)&&!flag){
//		cout<<0;
//		return 1;
//	}
//	cout<<"str1:"<<str1<<endl;
//	cout<<"str2:"<<str2<<endl;
	int lena,lenb,lenc;
	lena=str1.length();
	lenb=str2.length();
	for(int i=0;i<lena;++i)
	a[lena-i]=str1[i]-'0';
	for(int i=0;i<lenb;++i)
	b[lenb-i]=str2[i]-'0';
	int len=max(lena,lenb);
	
	
	int index=1;
	while(index<=len){
		int temp= a[index]-b[index];
		if(temp<0){
			c[index]=temp+10;
			a[index+1]--;
		}else{
			c[index]=temp;
		}
		index++;
	}
	int t=len;
	for(int i=len;i>0;i--){
		if(c[i]){
			t=i;
			break;
		}
	}
	for(int i=t;i>0;i--)
	cout<<c[i];
	cout<<endl;
	return 0;
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值