俩个大正整数相加

来源:互联网 发布:淘宝关键词修改不见 编辑:程序博客网 时间:2024/05/02 00:51

这个题听说的华为的题目。

前提是正整数。思路不难,主要注意细节即可!

#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 数组小端存储。

//另一种思路,是直接先相加,再反转。

0 0
原创粉丝点击