c语言(最基本的) A-B问题!!

输入
输入包含多组测试数据。每组数据的只有一行包含两个整数A、B(0 < A、B < 10^60)。
输出

对于每组测试数据,输出只有一行为A-B的值。
示例输入

1000000000000000000 1000000000000000000
示例输出

0
谢谢,思路说一下吧。

第1个回答  2012-12-27
要考虑两种情况,首先是减数与被减数的位数是否一样多,如果一样多,看最高位那个大(主要是考虑差为负数的情况,为负数时难度会大)我考虑减数大于被减数且位数一样的情况,存在数组里从低位开始,做个循环,定义两个常变量一个为1,一个为10,没一个位做一次减法,判断差是否小于零,如果小于零,就加10,下个减法的时候在减个1,其它的不变
第2个回答  2012-12-27
大数加减法,用数组int a[70],b[70]保存两个大数
手动实现减法,从低位到高位依次相减,小于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);
}

}

本回答被提问者采纳
第3个回答  2012-12-27
想做大数的减法吗?追问

追答

可以自己去实现这样的减法啊,思路是这样:
用数组去存大数,然后每个对应元素相减,每次相减后,一定得记录下借位借了多少,从低位往高位计算一遍就好了。
另外就是输出,也得自己去实现,最好用类封装一下吧,然后重载基本的运算符,+,-,*,/

追问

嗯。我自己尝试一下吧。成功了顶你!

追答

嗯,自己先试试,有问题的话,再讨论。

相似回答