大家好,我是屁孩君,今天给大家带来算法学习:高精度减法。
题目描述
高精度减法,求a-b。a,b都是不超过240位的非负整数。
输入
两个非负整数,每行一个。
输出
一个整数,代表两个整数相减之后的结果。
样例
输入
33333333333333333333333333333333333333333
22222222222222222222222222222222222222222
输出
11111111111111111111111111111111111111111
屁孩君先给大家来写一下步骤
1:判断结果正负
if(s1.size()<s2.size()||(s1.size()==s2.size()&&s1<s2))
{
q='-';//如果是负数得把符号改成-
swap(s1,s2);//交换位置
}
2:逆序存入数组
for(int i=0;i<s1.size();i++)
{
a[i]=s1[s1.size()-i-1]-'0';
}
for(int i=0;i<s2.size();i++)
{
b[i]=s2[s2.size()-i-1]-'0';
}
3:从左到右逐个减
for(int i=0;i<s1.size();i++)
{
if(a[i]<b[i])
{
a[i+1]-=1;
a[i]+=10;
}
c[i]=a[i]-b[i];
}
4:逆序输出
for(int i=len-1;i>=0;i--)if(c[i]!=0){//重要代码,找出不是0的位置
p=i;break;
}
for(int i=p;i>=0;i--)cout<<c[i];//逆序输出
话不多说,直接上完整代码
#include<bits/stdc++.h>
using namespace std;
string s1,s2;
int a[240],b[240],c[240];
char q='+';
int main()
{
int p;
cin>>s1>>s2;
if(s1.size()<s2.size()||(s1.size()==s2.size()&&s1<s2))
{
q='-';
swap(s1,s2);
}
for(int i=0;i<s1.size();i++)
{
a[i]=s1[s1.size()-i-1]-'0';
}
for(int i=0;i<s2.size();i++)
{
b[i]=s2[s2.size()-i-1]-'0';
}
if(q=='-')cout<<'-';
for(int i=0;i<s1.size();i++)
{
if(a[i]<b[i])
{
a[i+1]-=1;
a[i]+=10;
}
c[i]=a[i]-b[i];
}
int len=s1.size();
for(int i=len-1;i>=0;i--)if(c[i]!=0){
p=i;break;
}
for(int i=p;i>=0;i--)cout<<c[i];
return 0;
}
今天屁孩君就给大家分享到这里了!
古德拜!!!
记得一键三连哦!!!