这个题听说的华为的题目。
前提是正整数。思路不难,主要注意细节即可!
#include <iostream>
#include <algorithm>
#include <stdlib.h>
using namespace std;
void add_bigdata(char * first_char,char *second_char,char *result)
{
int len_first = strlen(first_char);
int len_second = strlen(second_char);
int len_min,len_max;
//先反转
reverse(first_char,first_char+len_first);
reverse(second_char,second_char+len_second);
len_max = max(len_first,len_second);
len_min = min(len_first,len_second);
char carry = 0;
for(int i = 0; i < len_min ; i++)//处理含公共长度
{
char temp_sum = first_char[i] + second_char[i] - '0';//任然是字符
if(temp_sum + carry > '9')//不要用'10' -- 》 为俩个字符!!!
{
result[i] = temp_sum + carry -10;
carry = 1;
}
else
{
result[i] = temp_sum + carry ;
carry = 0;
}
}
//下面统一处理串长的。
char *left ;
if(first_char[len_min] != '\0' )
{
left = first_char;
}
else
{
left = second_char;
}
int j = len_min;
for( ; j < len_max; j++)
{
char temp_sum = left[j];//任然是字符
if(temp_sum + carry > '9')
{
result[j] = temp_sum + carry -10;
carry = 1;
}
else
{
result[j] = temp_sum + carry ;
carry = 0;
}
}
//处理末尾进位
if(carry == 1)//有进位
{
result[j] = '1';
result[j+1] = '\0';
}
else
{
result[j] = '\0';
}
//转换顺序
reverse(result,result+strlen(result));
}
int main()
{
char first_char[100];
char second_char[100];
char result[101];//可能进位
cout<<"first data: ";
cin>>first_char;
cout<<"second data: ";
cin>>second_char;
cout<<endl;
add_bigdata(first_char,second_char,result);
cout<<result<<endl;
}
//注意下不要稀里糊涂的用‘10’,这个可能会犯错,当数字用!
//char 数组小端存储。//另一种思路,是直接先相加,再反转。