永发信息网

请高手验一个程序:求任意两个三十位数的和与差.

答案:3  悬赏:40  手机版
解决时间 2021-11-27 16:33
  • 提问者网友:斑駁影
  • 2021-11-27 11:15
请高手验一个程序:求任意两个三十位数的和与差.
最佳答案
  • 五星知识达人网友:夜余生
  • 2021-11-27 11:39
程序非常简单,不用你这么复杂,看我下面的程序,逻辑很清晰:

#include
#define N 80
main()
{

char a[N+2],b[N+2],c[N+2];
int i,ia,ib,k,x,xa,xb,flag;
printf("max number length is %d\n\n",N);
printf("input the first number(a):\n");
scanf("%s",a);
printf("input the second number(b):\n");
scanf("%s",b);

ia=strlen(a)-1;ib=strlen(b)-1;i=0;k=0;
while (ia>=0 && ib>=0) {
xa=ia>=0?a[ia]-'0':0;
xb=ib>=0?b[ib]-'0':0;
x=xa+xb+k;k=x/10;x=x%10;c[i]=x+'0';
i++;ia--;ib--;
}
if (k>0) c[i]=k+'0'; else i--;
printf("a+b=");
while(i>=0) {putchar(c[i]);i--;}
printf("\n");

ia=strlen(a)-1;ib=strlen(b)-1;i=0;k=0;
flag=(ia>ib || ia==ib && a[0]>b[0]);
while (ia>=0 && ib>=0) {
xa=ia>=0?a[ia]-'0':0;
xb=ib>=0?b[ib]-'0':0;
x=flag?xa-xb-k:xb-xa-k;
k=x<0;x+=x<0?10:0;c[i]=x+'0';
i++;ia--;ib--;
}
i--;
printf("a-b=%c",flag?'+':'-');
while(i>=0) {putchar(c[i]);i--;}
printf("\n");
}

程序可以计算任意大的数,只要适当改变N即可。

程序先计算a+b,然后计算a-b,计算减法的时候先判断大小,确定结果的正负,然后逐位相减的时候根据符号确定减的方向。

程序在TURBOC下调试通过,保证正确运行。
全部回答
  • 1楼网友:夜风逐马
  • 2021-11-27 13:34
有c++类实现的程序要不要?
  • 2楼网友:一叶十三刺
  • 2021-11-27 12:13
#include
main()
{ int a[240]={0},b[240]={0},c[241]={0};
int i,ka,kb,k;
char a1[240],b1[240];
gets(a1);ka=strlen(a1);
gets(b1);kb=strlen(b1);
if(ka>=kb) k=ka;
else k=kb;
for(i=0;i for(i=0;i for(i=0;i {c[i]=a[i]+b[i]+c[i];
c[i+1]=c[i+1]+c[i]/10;
c[i]=c[i]%10;
}
if(c[k]) k++;
for(i=k-1;i>=0;i--) printf("%d",c[i]);
system("pause");
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯