非常简单的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;
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;
}
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯