输入
输入包含多组测试数据。每组数据的只有一行包含两个整数A、B(0 < A、B < 10^60)。
输出
对于每组测试数据,输出只有一行为A-B的值。
示例输入
1000000000000000000 1000000000000000000
示例输出
0
谢谢,思路说一下吧。
能写一下吗?有点麻烦哈
追答实际上需考虑正负等因素,稍微有点繁琐,以下代码转自网络,供参考:
void sub(char *x,char *y)
{
int i;
int x_len=strlen(x);
int y_len=strlen(y);
for(i=x_len-1;i>=x_len-y_len;i--)
{
if(x[i]>=y[i-(x_len-y_len)])
x[i]=x[i]-y[i-(x_len-y_len)];
else
{
x[i-1]-=1;
x[i]=x[i]+10-y[i-(x_len-y_len)];
}
}
}
void plus(char *a,char *b,int a_len,int b_len)
{
int i;
char back_a[100],back_b[100];
int flag=0; //减后的结果是正数
if(b_len>a_len)flag=1; //减后的结果是负数
else if(b_len=a_len)
for(i=0;i<a_len;i++)
if(a[i]<b[i])
{
flag=1;
break;
}
else flag=0;
strcpy(back_a,a); //备份a
strcpy(back_b,b); //备份b
if(!flag) //如果结果是正数
{
sub(a,b);
printf("%s-%s=%s",back_a,back_b,a);
}
else
{
sub(b,a);
printf("%s-%s=-%s",back_a,back_b,b);
}
}
对
追答可以自己去实现这样的减法啊,思路是这样:
用数组去存大数,然后每个对应元素相减,每次相减后,一定得记录下借位借了多少,从低位往高位计算一遍就好了。
另外就是输出,也得自己去实现,最好用类封装一下吧,然后重载基本的运算符,+,-,*,/
嗯。我自己尝试一下吧。成功了顶你!
追答嗯,自己先试试,有问题的话,再讨论。