永发信息网

非常简单的C语言程序,就是运算两个整数相加,但是结果出现巨大的负数,求大神解答。

答案:2  悬赏:70  手机版
解决时间 2021-03-17 21:55
  • 提问者网友:欺烟
  • 2021-03-17 13:13


这么简单真的没有人会吗






最佳答案
  • 五星知识达人网友:举杯邀酒敬孤独
  • 2021-03-17 14:39
错误原因,c没有被正确赋值
c=a+b;
应该放到scanf语句后面,先对a和b输入赋值
再计算c=a+b;
全部回答
  • 1楼网友:蕴藏春秋
  • 2021-03-17 15:52
你可以找一下加密库的源文件来研究下,里面就有大数四则运算,曾经试着写2048位的大数四则运算,结果就写了加法,减法,和简单的没有优化的乘法就没信心写了。。。大数是用数组表示的,没有用结构体,复制来的,不知能不能运行。。 #define max 400 void my_read(int *a) { int len,i,flag=0; char s[max]; aa: while(1) {   scanf("%s",&s);   len=strlen(s);   if (s[0]=='-') flag=1;   for(i=len-flag;i>=1;i--)   {    if ((s[len-i]-'0')<0||(s[len-i]-'0')>9)     {       printf("\t\t\t你输入的第%d位不合法,按任意键重新输!!",len-i+1);       getch();       goto aa;     }     else      a[i]=s[len-i]-'0';    }    if (flag)        a[0]=-(len-1);     else        a[0]=len;    break;   } return; } void my_print(int *a) { int i; if (a[0]<0) printf("-"); if (a[0]==0)    {     printf("0");     return;     } for(i=abs(a[0]);i>=1;i--)   printf("%d",a[i]); printf("\n"); } void format(int *a) { int p; for(p=1;p=10;p++) {   if (p>=a[0]) a[p+1]=0;      a[p+1]+=a[p]/10;   a[p]=a[p]%10;   } if (p>=a[0]) a[0]=p; return; } void add(int *a,int *b,int *c) { int len,i; if (a[0]0) {   b[0]++;   b[b[0]]=a[1]%2;   p=a[0];   while(p>0)   {    if (a[p]%2 && p>1) a[p-1]+=10;     a[p]/=2;    if (a[a[0]]==0) a[0]--;      p--;    } } } format1(int *a) { int i; for (i=1;i<=a[0];i++)    if (a[i]<0)    { a[i]+=10;      a[i+1]-=1;    } } void sub_1(int *a,int *b,int *c) {   int i;   for (i=1;i<=b[0];i++)     c[i]=a[i]-b[i];   if (a[0]==b[0]) goto loop;   for (;i<=a[0];i++)     c[i]=a[i];   loop:   c[0]=a[0];   format1(c);   i=c[0];   while(1)    if (c[i]==0) i--;      else break;   c[0]=i;   return; } void sub(int *a,int *b,int *c) { int i,flag=0; for (i=1;i<=a[0];i++)      if (a[i]!=b[i]) {flag=1;break;} if (flag==0)   {    c[0]=0;    return;    } flag=0; if (a[0]==b[0])    {     i=a[0];     while(i>0)     {      if (a[i]>b[i]) {  sub_1(a,b,c);  break;  }      if (a[i]b[0])     sub_1(a,b,c);   else    if (a[0]0 && b[0]<0) {b[0]=-b[0];sub(a,b,c);b[0]=-b[0];goto c;}     if (a[0]>0 && b[0]>0) {add(a,b,c);goto c;}     if (a[0]<0 && b[0]>0) {a[0]=-a[0];sub(b,a,c);a[0]=-a[0];goto c;}     c:     printf("\n\t\t\t");     printf("a=");     my_print(a);     printf("\n\t\t\t");     printf("b=");     my_print(b);     printf("\n\t\t\t");     printf("c=a+b=");     my_print(c);     goto loop;    }   if (yn=='2')    {     if (a[0]<0 && b[0]<0) {a[0]=-a[0];b[0]=-b[0];sub(b,a,c);a[0]=-a[0];b[0]=-b[0];}     if (a[0]<0 && b[0]>0) {a[0]=-a[0];add(a,b,c);a[0]=-a[0];c[0]=-c[0];}     if (a[0]>0 && b[0]<0) {b[0]=-b[0];add(a,b,c);b[0]=-b[0];}     if (a[0]>0 && b[0]>0) sub(a,b,c);     printf("a=");     my_print(a);     printf("\nb=");     my_print(b);     printf("\nc=a-b=");     my_print(c);     goto loop;    }   if (yn=='3')    {     if (a[0]<0 && b[0]>0) {a[0]=-a[0];matiply(a,b,c);a[0]=-a[0];c[0]=-c[0];goto d;}     if (a[0]>0 && b[0]<0) {b[0]=-b[0];matiply(a,b,c);b[0]=-b[0];c[0]=-c[0];goto d;}     if (a[0]<0 && b[0]<0) {a[0]=-a[0];b[0]=-b[0];matiply(a,b,c);a[0]=-a[0];b[0]=-b[0];goto d;}     matiply(a,b,c);     d:     printf("\n\t\t\ta=");     my_print(a);     printf("\n\t\t\tb=");     my_print(b);     printf("\n\t\t\tc=a*b=");     my_print(c);     goto loop;    }   loop:   while(1)   {    printf("\n\t\t\t继续计算吗?(y/n)");    yn=getch();    if (yn=='y') goto strat;    if (yn=='n') return;   } }
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯