高精度算法,减法
昨天编写了高精度算法的加法,思路值得多看
今天是高精度算法的减法,代码如下:
int main()
{
string s1,s2;
int a1[210]={0},a2[210]={0},a3[210]={0};
getline(cin,s1);
getline(cin,s2);
char flag='+';
if(s1.size()<s2.size()||(s1.size()s2.size()&&s1<s2))
{
swap(s1,s2);
flag='-';
}
for(int i=0;i<s1.size();i++)
{
a1[i]=s1[s1.size()-i-1]-'0';
}
for(int i=0;i<s2.size();i++)
{
a2[i]=s2[s2.size()-i-1]-'0';
}
for(int i=0;i<s1.size();i++)
{
if(a1[i]<a2[i])
{
a1[i]=a1[i]+10;
a1[i+1]=a1[i+1]-1;
}
a3[i]=a1[i]-a2[i];
}
if(flag'-')
{
cout<<flag;
}
int index=0;
if(a3[s1.size()!=0])
{
for(int i=s1.size()-1;i>=0;i--)
{
cout<<a3[i];
}
}
else
{
for(int i=s1.size()-2;i>=0;i--)
{
cout<<a3[i];
}
}
system("pause");
return 0;
}
输入案例:
222222222222222222222
111111111111111111111
输出:
111111111111111111111
代码难点:
1.用不熟悉的swap函数将两个字符串中存放的数据交换
2.两个字符串也可以进行比较大小,可以理解为是ASCII码
3.借位的思想和昨天的进位的思想如出一辙
4.关于结果的正负用一个字符flag来表示
理解以上内容之后就可以了,这一串代码的难度就集中在上面的难点,搞定了。
浙公网安备 33010602011771号