永发信息网

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

答案:2  悬赏:70  手机版
解决时间 2021-03-17 21:55


这么简单真的没有人会吗






最佳答案
错误原因,c没有被正确赋值
c=a+b;
应该放到scanf语句后面,先对a和b输入赋值
再计算c=a+b;
全部回答
你可以找一下加密库的源文件来研究下,里面就有大数四则运算,曾经试着写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;   } }
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
9月14买的车还没上牌能享受购置税减半吗?
如何申请南昌航空大学的官方邮箱
有人往外面贷款吗
铃木红巨星,金巨星,海王星哪一台好阿?我是
玫瑰之约(鲜鲜鲜花店)地址有知道的么?有点事
第四自然段和第五自然段中的“这”字,分别具
南开高一是怎样分班的,知道的请进》
中石化三和加油站(三和镇向民村人民路与金天
青储饲料粉碎后能够保存多久
金足阁养生馆怎么去啊,有知道地址的么
exagear是win7还是xp
谁知道《word up》的歌词大意
谁有四月是你的谎言真人版,免费的
Carry on 的后面可以直接加名词不加with表示
烫过的发质,把烫的头发剪掉,发质还能回到没
推荐资讯
设置了消火栓的车间未按规定配备灭火器,还得
机油滤清器也会发出异响吗
这相片好看吗
我有一亲人死亡,开始死因不明,其兄弟提出尸
新利音像地址在哪,我要去那里办事
16光年等于多少千米?
周记,看了一本的感受150一200字
同时佩戴多种水晶手链有没有副作用
分子结构中含有什么基的药物可发生重氮化偶合
我有三个快递,加起来差不多50公斤,发哪个快递
浙江财经学院统计学要学什么
有广西到南阳的汽车吗?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?