【发布时间】:2014-07-19 10:02:20
【问题描述】:
我正在编写一个程序来在C 中添加两个大数。
我的整数数组结果包含两个数字的总和(也存储在数组中)。
例如,如果结果数组为[0,0,3,2](实际数组大小为20)
如果 32 是我的实际结果,我怎样才能显示没有前导零的结果数组的内容?
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define BASE 10
void align(int A[],int n);
void add(int A[],int B[], int C[]);
void Invert(int* a, int n);
int main(int argc, char** argv){
char input1[20];
char input2[20];
int size = 20;
int a;
int b;
int num1[20];
int num2[20];
int result[20];
int length1 = strlen(argv[1]);
int length2 = strlen(argv[2]);
int i = 0;
for (i=0;i<length1;i++){
input1[i] = argv[1][i];
}
for (i=0;i<length2;i++){
input2[i] = argv[2][i];
}
a=atoi(input1);
b=atoi(input2);
align(num1,a);
align(num2,b);
add(num1,num2,result);
Invert(result,size);
for (i=0;i<20;i++){
printf("%d",result[i]);
}
return 0;
}
void align (int A[], int n){
int i = 0;
while (n) {
A[i++] = n % BASE;
n /= BASE;
}
while (i < 20) A[i++] = 0;
}
void add (int A[], int B[], int C[]) {
int i, carry, sum;
carry = 0;
for (i=0; i<20; i++) {
sum = A[i] + B[i] + carry;
if (sum >= BASE) {
carry = 1;
sum -= BASE;
} else
carry = 0;
C[i] = sum;
}
if (carry) printf ("overflow in addition!\n");
}
void Invert(int* a, int n)
{
int i;
int b;
for(i=0; i<n/2; i++){
b = a[i];
a[i] = a[n-i-1];
a[n-i-1] = b;
}
}
`
【问题讨论】:
-
没有得到..你能详细说明一下吗?
-
为了让这里的人真正了解你在做什么,如果你能发布你的代码会有所帮助。对于大数字,我假设您的意思是大整数。
-
只是迭代数字并在您看到第一个非零之后才开始打印它们? (在它们都为零的特殊情况下,打印一个 0。)
-
抱歉,刚刚添加了代码。
-
是的,鲁迪。我正在尝试添加两个大整数(20 位)。
标签: c arrays sorting leading-zero