只是为了好玩,我正试着用C语言写一段代码,它像人类一样加2个数字.However the code breaks if they are of same length.还有其他方法可以将2个非常大的数字相加,但是他们使用诸如倒数、位操作符或使用长整型这样的技巧来相加;这不是我想要的.
#include <stdio.h>
#include <stdlib.h>
int main()
{
int *ptr, *ptr2, *ptr3;
int size, size2, size3, carry = 0;
printf("Enter size of 1st element: ");
scanf("%d", &size);
ptr = (int *)calloc(size, sizeof(int));
if (ptr == NULL)
printf("Memory not allocated.\n");
else {
for (int j = 0; j < size; ++j) {
scanf("%d", &ptr[j]);
}
}
printf("\nEnter size of 2nd element: ");
scanf("%d", &size2);
ptr2 = (int *)calloc(size2, sizeof(int));
if (ptr2 == NULL)
printf("Memory not allocated.\n");
else {
for (int j = 0; j < size2; ++j) {
scanf("%d", &ptr2[j]);
}
}
printf("\n");
// Addition starts here
if (size > size2)
size3 = size + 1;
else
size3 = size2 + 1;
ptr3 = (int *)calloc(size3, sizeof(int));
for (int j = 0; j < size3; ++j) {
ptr3[j]=0;
}
if (size > size2) { //1st number higher digits
for (int k = 1; k <= size2; ++k) {
ptr3[k - 1] = (carry + ptr[size - k] + ptr2[size2 - k]);
carry = ptr3[k - 1] / 10;
ptr3[k - 1] = ptr3[k - 1] % 10;
}
for (int k = size2 + 1; k <= size; ++k) {
if (k == size2)
ptr3[k - 1] = ptr[size - k] + carry;
else
ptr3[k - 1] = ptr[size - k];
}
} else if (size2 > size) { //2nd number higher digits
for (int k = 1; k <= size; ++k) {
ptr3[k - 1] = (carry + ptr2[size2 - k] + ptr[size - k]);
carry = ptr3[k - 1] / 10;
ptr3[k - 1] = ptr3[k - 1] % 10;
}
for (int k = size + 1; k <= size2; ++k) {
if (k == size)
ptr3[k - 1] = ptr2[size2 - k] + carry;
else
ptr3[k - 1] = ptr2[size2 - k];
}
} else { //equal digits
for (int k = size; k > -1; --k) {
ptr3[k] = (carry + ptr2[k] + ptr[k]);
printf("%d + %d = %d\n", ptr2[k], ptr[k], ptr3[k]);
carry = ptr3[k] / 10;
ptr3[k] = ptr3[k] % 10;
}
}
// DISPLAY
for (int j = 0; j < size; ++j) {
printf("%d", ptr[j]);
}
printf("+");
for (int j = 0; j < size2; ++j) {
printf("%d", ptr2[j]);
}
printf(" = ");
for (int j = size3; j > -1; --j) {
if (ptr3[j] >= 0)
printf("%d", ptr3[j]);
}
return 0;
}