面试题17_1:实现两个大数相加
本题考查大数问题。大数一般用字符串或者数组表示。注意,strlen()函数返回的值是数组'\0'前元素的个数,并不包括'\0'。
C++版本
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
void printNumber(char number[]){
bool isBeginning0 = true;
int nLength = strlen(number);
for(int i = 0; i < nLength; i++){
if(isBeginning0 && number[i] != '0')
isBeginning0 = false;
if(!isBeginning0)
printf("%c", number[i]);
}
printf("\t");
}
// 实现两个大数相加,结果记入到a[]
bool addBigInt(char a[], char b[], int arraySize){
bool isOverFlow = false;
// 第n个进位
int nTakeOver = 0;
for(int i = arraySize-1; i>=0; i--){
int nSum = (a[i]-'0') + (b[i]-'0') + nTakeOver;
// 如果产生进位
if(nSum > 9){
// 如果是首位产生了进位,那么溢出
if(i == 0)
isOverFlow = true;
else{
a[i] = '0' + nSum - 10;
nTakeOver = 1;
}
}
// 如果没有产生进位,这里不会break;
else{
a[i] = '0' + nSum;
nTakeOver = 0;
}
}
return isOverFlow;
}
int main()
{
char a[8] = {'1','6','3','5','3','5','4','\0'};
char b[8] = {'0','0','4','3','2','6','3','\0'};
cout<<strlen(a)<<endl;
if(!addBigInt(a, b, strlen(a)))
printNumber(a);
return 0;
}