落谷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;
} 
发布了481 篇原创文章 · 获赞 236 · 访问量 50万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 精致技术 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览