[英]How to fix the output of the following C program?
我對以下C程序的輸出有問題。 它沒有為我提供正確的輸出。我從兩個大數之和轉換了該程序。 所以我得到的輸出帶有一些“錯誤”,例如“ 232423-3-4-34--3424”,而不是“ 23242334343424”。 我該如何解決?
#include<stdio.h>
int main() {
int num1[255], num2[255], dif[255];
char s1[255], s2[255];
int l1, l2;
printf("Enter Number1:\n");
scanf("%s", &s1);
printf("Enter Number2:\n");
scanf("%s", &s2);
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++) {
dif[k] = (num1[i] - num2[j] - carry) % 10;
carry = (num1[i] - num2[j] - carry) / 10;
}
if (l1 > l2) {
while (i >= 0) {
dif[k++] = (num1[i] - carry) % 10;
carry = (num1[i--] - carry) / 10;
}
} else if (l1 < l2) {
while (j >= 0) {
dif[k++] = (num2[j] - carry) % 10;
carry = (num2[j--] - carry) / 10;
}
} else {
if (carry > 0)
dif[k++] = carry;
}
printf("Result:");
for (k--; k >= 0; k--)
printf("%d", dif[k]);
return 0;
}
您的結果包含負數,因為該代碼未正確實現10模運算。 在這樣的行中:
dif[k] = (num1[i] - num2[j] - carry) % 10;
如果減法num1[i] - num2[j] - carry
小於0, num1[i] - num2[j] - carry
存儲10減法的結果。 在某些語言中, %
運算符的工作方式與此類似,但是在C中,它返回負數,因此-1 % 10
產生-1而不是9。
要解決此問題,代碼需要更加明確,例如:
int sub = num1[i] - num2[j] - carry;
if (sub >= 0) {
dif[k] = sub;
carry = 0;
} else {
dif[k] = 10 - sub;
carry = 1;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.