【发布时间】:2015-11-16 23:26:49
【问题描述】:
由于 C 不支持大整数作为 JAVA,我正在尝试实现一个整数加法器函数,该函数将两个整数数组作为参数并返回一个指向它们总和的指针,该指针又是一个数组。这是我的代码。
#include<stdio.h>
#include<stdlib.h>
int max(int a,int b) {
return a < b ? b : a;
}
int* decimalAdder (int* p, int* q) {
int size1, size2, i;
size1 = sizeof(p) / sizeof(int);
size2 = sizeof(q) / sizeof(int);
int m = max(size1, size2) + 1;
int* c = (int*)malloc(m * sizeof(int));
int carry = 0;
for(i=0 ; i<m ; i++) {
c[i] = 0;
if(i < size1 && i < size2) {
c[i] += p[i] + q[i] + carry;
if(c[i] >= 10) {
c[i] = c[i] % 10;
carry = 1;
}
else
carry = 0;
}
else if(i < size1) {
c[i] += p[i] + carry;
if(c[i] >= 10) {
c[i] = c[i] % 10;
carry = 1;
}
else
carry = 0;
}
else if(i < size2) {
c[i] += q[i] + carry;
if(c[i] >= 10) {
c[i] = c[i] % 10;
carry = 1;
}
else
carry = 0;
}
else
c[i] += carry;
}
return c;
}
//Test program
int main() {
int a[] = {7, 5, 3, 6};
int b[] = {3, 5, 3};
int* sum;
int i;
sum = decimalAdder(a, b);
int size = sizeof(sum) / sizeof(int);
for(i = size ; i >= 0 ; i--)
printf("%d", sum[i]);
free(sum);
sum=NULL;
return 0;
}
输出 10 我哪里错了?我错过了什么?
【问题讨论】:
-
sizeof(p)和sizeof(q)与sizeof(int *)相同。您需要将真实的数组大小作为参数传递给decimalAdder()。 -
谢谢。著名的。但是如果不知道如何确定 p 和 q 的真实大小呢?
-
要么将长度作为
size_t类型的附加参数传递,要么像 C 字符串一样添加尾随空字节。 -
即使我想将数组大小作为参数传递,仍然需要确定数组大小。怎么做?这个问题stackoverflow.com/questions/37538/… 和我一样。
-
虽然 C 没有内置大整数,但您可以使用 libgmp 之类的库来获得类似的结果。
标签: c arrays integer add biginteger