题目:
1. 输入数据 a, b 分别是很长的整数,求和,输出a+b的结果;
思路:
1. 将a, b 作为字符串输入,并且对短的进行0填充,填充之后等长;
2.实现几个子函数,一个用于从低位到高位,逐渐相加,有进位就往前加一个;
3.在每个累加结束后,看最后一位有没有进位的需求,进位;
代码实现:
#include<iostream>
#include<string>
using namespace std;
#define CHAR_NUMBER_DIFF 48
/*
push_forward:
1 push
0 not push
*/
int add(int a_element, int b_element, int *push_forward)
{
int result = 0;
result = a_element+b_element;
if(result>9)
{
*push_forward = 1;
result = result -10;
}
else
{
*push_forward = 0;
}
return result;
}
char convert_number_char(int input)
{
char result;
result = (char)(input + CHAR_NUMBER_DIFF);
return result;
}
int convert_char_number(char input)
{
int result = 0;
result = (int)(input - CHAR_NUMBER_DIFF);
return result;
}
string pad_zero(string input, int len)
{
int i=0;
for(i=0; i<len; i++)
{
input.insert(0, 1, '0');
}
return input;
}
int main()
{
string input_a_str = "11112223245789";
string input_b_str ="232323223232322232323";
string result_str = "";
int tmp_end = 0;
int a_tmp = 0;
int b_tmp = 0;
int push_forward =0;
int result = 0;
char result_char;
if(input_a_str.length() > input_b_str.length())
{
tmp_end = input_a_str.length();
input_b_str = pad_zero(input_b_str, (input_a_str.length() - input_b_str.length()));
}
else
{
tmp_end = input_b_str.length();
input_a_str = pad_zero(input_a_str, (input_b_str.length()-input_a_str.length()));
}
cout<<"input_a_str :"<<input_a_str<<endl;
cout<<"inpu_b_str :"<<input_b_str<<endl;
int j = 0;
for(j=(tmp_end-1); j>=0;j--)
{
char a = input_a_str[j];
char b = input_b_str[j];
a_tmp = convert_char_number(a);
b_tmp = convert_char_number(b);
if(push_forward == 1)
{
a_tmp = a_tmp + 1;
push_forward = 0;
}
result = add(a_tmp, b_tmp, &push_forward);
result_char = convert_number_char(result);
result_str = result_str.insert(0, 1, result_char);
}
if(push_forward)
{
result_str = result_str.insert(0, 1, '1');
}
cout<<"final_result:"<<result_str<<endl;
return 0;
}