C 通过字符数组将两个大数相加

标签 c

我需要使用 char 数组添加两个大小为 0-100 位的大数字,但我不知道如何处理空数组单元格..

如何将数组单元格与未分配的数字进行比较。我想把这个案子分成两部分。

bigM[i] == empty cell, directly put bigN[i] + carry in to sum[i] 
bigN[i] == empty cell, directly put bigM[i] + carry  in to sum[i]

//
// AddTwoBigNumbers: to sum up two big numbers represented as digits in a char clear_char_array
//
// input:  char bigN[], char bigM[]:  two large numbers
// output the sum as a big number in the input array char sum[]
void AddTwoBigNumbers(char bigN[], char bigM[], char sum[])
{
    reverseArray(bigN, 0, 100);
    reverseArray(bigM, 0, 100);

    //calculation
    int carry = 0;
    for(int i = 100; i >= 0; i--)
    {
        int sum_two = (bigN[i] - '0') + (bigM[i] - '0') + carry;
        sum[i] = sum_two % 10 + '0';
        carry = sum_two / 10;
    }

    reverseArray(sum, 0, 100);
}

ideone link

最佳答案

可以使用每个数组的计数器。
当计数器到达数组末尾时,if block 将不再执行。
当两个计数器都到达数组末尾时,跳出循环。

//calculation
int i = 0;
int carry = 0;
int index = 0;
int next = 0;
while ( 1) {
    int sum_two = carry;
    if ( bigM[index]) {// not zero
        sum_two += bigM[index] - '0';
        index++
    }
    if ( bigN[next]) {//not zero
        sum_two += bigN[next] - '0';
        next++;
    }
    sum[i] = sum_two % 10 + '0';
    i++;
    carry = sum_two / 10;
    if ( bigM[index] == 0 && bigN[next] == 0) {//both are zero
        break;
    }
}
if ( carry) {
    sum[i] = carry + '0';
    i++;
}
sum[i] = 0;//terminate with zero

关于C 通过字符数组将两个大数相加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55430791/

相关文章:

c - 得到意外的输出

c - 了解 fwrite() 行为

c++ - OpenCV:如何在图像上应用彩虹渐变图?

c - remove() - 调用的对象 'remove' 不是函数

c - 判断fork()创建的子进程数

c - system()函数打开一个窗口

c - 将 char* 分配给 char

c - 如何调用以指针数组作为参数的函数?在C中

c - 为什么 str1==str2 "equal"?

复制c中的子目录