[英]Can add very large numbers but not small numbers in C
我有一个可以添加大数的C程序,它可以正常工作,但是我也需要添加小数,但是我得到的输出是奇数,并且不确定错误来自何处。
#include<stdio.h>
#include<string.h>
int main() {
int num1[255], num2[255], sum[255], m = 0, z, x = 0;
char s1[255], s2[255], in[255];
int l1, l2;
printf("enter the input as a+b=\n");
scanf("%s", in);
for (z = 0; in[z] != '+'; z++) {
s1[z] = in[z];
m++;
}
for (z = m + 1; z < strlen(in) - 1; z++) {
s2[x] = in[z];
x++;
}
for (l1 = 0; s1[l1] != '\0'; l1++)
num1[l1] = s1[l1] - '0';
for (l2 = 0; s2[l2] != '\0'; l2++)
num2[l2] = s2[l2] - '0';
int carry = 0;
int k = 0;
int i = l1 - 1;
int j = l2 - 1;
for (; i >= 0 && j >= 0; i--, j--, k++) {
sum[k] = (num1[i] + num2[j] + carry) % 10;
carry = (num1[i] + num2[j] + carry) / 10;
}
if (l1 > l2) {
while (i >= 0) {
sum[k++] = (num1[i] + carry) % 10;
carry = (num1[i--] + carry) / 10;
}
if (carry != 0) {
sum[k] = carry;
k = k + 1;
}
} else if (l1 < l2) {
while (j >= 0) {
sum[k++] = (num2[j] + carry) % 10;
carry = (num2[j--] + carry) / 10;
}
if (carry != 0) {
sum[k] = carry;
k = k + 1;
}
} else {
if (carry > 0)
sum[k++] = carry;
}
printf("%s+%s=\n", s1, s2);
for (k--; k >= 0; k--)
printf("%d", sum[k]);
return 0;
}
如果输入以下值:
输入输入为a + b =
9999999999999999999999999999 + 1 =
我得到的输出就是我想要的
9999999999999999999999999999 + 1 =
10000000000000000000000000000
当我尝试较小的东西时:
123 + 456 =
输出不同
123ó+ 456 =
16-5-6
我不知道这些数字从何而来,并且任何小于99999999999999999999999999999999 + 1的数字都会不断出现,它应该适用于任何数字,而不仅仅是一个数字。
for (l1 = 0; s1[l1] != '\0'; l1++)
// ^^^^^^^^^^^^^^
这是一个问题:您正在s1
检查'\\0'
,但从未将s1
任何元素设置为'\\0'
,因此这将访问未初始化的内存并可能超出数组的范围。
您对s2
有同样的问题。
可能还有其他问题,但这是我停止阅读的地方。
普通的留言:
scanf
。 %s
与scanf
。 这是等待发生的缓冲区溢出。 for (z = 0; in[z] != '+'; z++)
循环将超出范围。字符串中的+
)。 您可能应该验证您的假设,而不是盲目地假设一切正常。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.