我需要使用 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);
}
最佳答案
可以使用每个数组的计数器。
当计数器到达数组末尾时,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/