两个大数相加
发布时间:2020-12-14 03:01:32 所属栏目:大数据 来源:网络整理
导读:两个大数相加,暂时选择简单版本,使用两个正整数相加,直接上代码了,不再啰嗦了。 #include iostream#define MAXNUM 10000bool inspectCharValid(char* value);void add(char* num1,char* num2,char* result);int main(int argc,char* argv[]){ char num1[
两个大数相加,暂时选择简单版本,使用两个正整数相加,直接上代码了,不再啰嗦了。 #include <iostream> #define MAXNUM 10000 bool inspectCharValid(char* value); void add(char* num1,char* num2,char* result); int main(int argc,char* argv[]) { char num1[MAXNUM] = {0}; char num2[MAXNUM] = {0}; std::cout << "请输入一个正整数:" << std::endl; std::cin >> num1; if (!inspectCharValid(num1)) { std::cout << "输入的整数不符合要求." << std::endl; return -1; } std::cout << "请输入一个正整数:" << std::endl; std::cin >> num2; if (!inspectCharValid(num1)) { std::cout << "输入的整数不符合要求." << std::endl; return -1; } char result[MAXNUM] = {0}; add(num1,num2,result); std::cout << "两个整数相加结果: " << result << std::endl; return 0; } bool inspectCharValid(char* value) { for (int i = 0; *(value + i); ++i) { if (*(value + i ) < '0' || *(value + i) > '9') { return false; } } return true; } void add(char* num1,char* result) { int sum = 0; int carry = 0; int len1 = strlen(num1); int len2 = strlen(num2); int maxLen = len1 > len2 ? len1 : len2; for (int i = 0; i < maxLen; ++i) { sum = carry; if (len1 > i) { sum += num1[len1 - i - 1] - '0'; } if (len2 > i) { sum += num2[len2 - i - 1] - '0'; } if (sum < 10) { carry = 0; result[maxLen - i - 1] = sum + '0'; } else { carry = sum/10; result[maxLen - i - 1] = sum%10 + '0'; } } if (carry > 0) { for (int i = 0; i < maxLen; ++i) { result[maxLen - i] = result[maxLen - i - 1]; } result[0] = carry + '0'; } } 测试结果如下: 请输入一个正整数: 123 请输入一个正整数: 3456 两个整数相加结果: 3579 Press any key to continue (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |