【发布时间】:2020-05-27 01:03:01
【问题描述】:
我正在尝试制作一个使用字符串添加非常大整数的程序。但是,对于与小于 7 的数字相加的整数,输出是无意义的,并且所有其他总和都比正确输出小 7。任何人都可以辨别出可能导致这种情况的原因吗? 7 似乎是凭空而来的。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#define MAX 10000
int main(void) {
char str1[MAX],str2[MAX],strnew[MAX],str[MAX];
int i,l,count,len1,len2,len,zers,nex,excess=0;
printf("Enter first number:");
fgets(str1,MAX,stdin);
printf("Enter second number:");
fgets(str2,MAX,stdin);
len1=strlen(str1);
len2=strlen(str2);
if(len1<=len2){
len=len2;
}
else{
len=len1;
}
if(len1<=len2){
zers=len2-len1;
for(i=0;i<len;i++){
if(i<zers){
strnew[i]='0';
}
else{
strnew[i]=str1[i-zers];
}
}
strnew[len]='\0';
}
if(len2<len1){
zers=len1-len2;
for(i=0;i<len;i++){
if(i<zers){
strnew[i]='0';
}
else{
strnew[i]=str2[i-zers];
}
}
strnew[len]='\0';
}
for(i=len;i>0;i--){
if(len1>len2){
str[i]=(strnew[i-1]-'0'+str1[i-1]-'0'+excess)%10+'0';
excess=(strnew[i-1]-'0'+str1[i-1]-'0'+excess-(strnew[i-1]-'0'+str1[i-1]-'0'+excess)%10)/10;
}
if(len2>=len1){
str[i]=(strnew[i-1]-'0'+str2[i-1]-'0'+excess)%10+'0';
excess=(strnew[i-1]-'0'+str2[i-1]-'0'+excess-(strnew[i-1]-'0'+str2[i-1]-'0'+excess)%10)/10;
}
}
str[len]='\0';
str[0]=excess+'0';
printf("%s",str);
}
【问题讨论】:
-
您的代码难以理解。一个原因是格式化,另一个是你的算法看起来太复杂了。我建议您简化它,然后尝试通过阅读代码来遵循它,看看您是否可以毫不费力地理解它在做什么。
-
并且避免将变量命名为
strnew,因为它看起来像str___函数,并且在c 中有很多。相反,使用sum或result之类的东西看起来更合乎逻辑