在科学城里住着一位减法神童,他可以在一秒钟内算出两个数相减的结果。这两个数可不是普通的数字,它们是11位以上的“宠然大物”。为了证明自己神奇的计算能力,减法神童请全城的人都来出题考自己,只要答错一题他就自愿放弃“减法神童”的称号。
你想考考减法神童吗?还是先编写一个程序帮我们算出任意两个11位以上的数相减的精确结果吧。
输入
第1行是被减数A,第2行是减数B(A,B的位数大于11,小于200)。
输出
A-B的结果。
输入样例
5894379463257
1245648324567
输出样例
4648731138690
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int compare(string x,string y)//判断两个数那个大 第一个大返回0 第二个大返回1
{
if (x.length()>y.length())
return 0;
else if (x.length()<y.length())
return 1;
else
{
for (int i=0;x[i];i++)
{
if (x[i]>y[i])
return 0;
if (x[i]<y[i])
return 1;
}
}
return 0;
}
int ax[205],bx[205];
int main()
{
string a,b;
int i;
cin>>a;
cin>>b;
ax[0]=a.length();
bx[0]=b.length();
for (i=1; i<=ax[0]; i++)
{
ax[i]=a[ax[0]-i]-'0';
}
for (i=1; i<=bx[0]; i++)
{
bx[i]=b[bx[0]-i]-'0';
}
if (compare(a,b)==0)
{
for (i=1;i<=ax[0];i++)
{
ax[i]=ax[i]-bx[i];
if (ax[i]<0)
{
ax[i]=10+ax[i];
ax[i+1]--;
}
}
while((ax[ax[0]]==0)&&ax[0]>1)
ax[0]--;
for (i=ax[0];i>=1;i--)
printf("%d",ax[i]);
}
else
{
printf("-");
for (i=1;i<=bx[0];i++)
{
bx[i]=bx[i]-ax[i];
if (bx[i]<0)
{
bx[i]=10+bx[i];
bx[i+1]--;
}
}
while((bx[bx[0]]==0)&&bx[0]>1)
bx[0]--;
for (i=bx[0];i>=1;i--)
printf("%d",bx[i]);
}
return 0;
}