Welcome

首页 / 软件开发 / 数据结构与算法 / 大整数乘法:给定两个长度不超过10000的整数并返回乘法的结果

大整数乘法:给定两个长度不超过10000的整数并返回乘法的结果2015-09-14题目:

大整数乘法, 给定两个长度不超过10000的整数, 返回乘法的结果.

char* multi(char* number_a, char* number_b)

代码:

/** test.cpp**Created on: 2014.04.24*Author: Spike*//*eclipse cdt, gcc 4.8.1*/#include <iostream>#include <cstring>using namespace std;char* multi(char* number_a, char* number_b) {int len_a = strlen(number_a); //计算长度int len_b = strlen(number_b);int* num_arr = new int[len_a+len_b];memset(num_arr, 0, sizeof(int)*(len_a+len_b)); //置0for (int i=len_a-1; i>=0; --i) { //计算每一位for (int j=len_b-1; j>=0; --j) {num_arr[i+j+1] += (number_b[j]-"0")*(number_a[i]-"0");}}for (int i=len_a+len_b-1; i>=0; --i) { //进位if (num_arr[i] >= 10) {num_arr[i-1] += num_arr[i]/10;num_arr[i] %= 10;}}char* result = new char[len_a+len_b+1];for( int i=0; i<(len_a+len_b); ++i){result[i] = (char)(((int)"0")+num_arr[i]);}result[len_a+len_b] = ""; //添加结束符delete[] num_arr;return result;//delete[] r;}int main(void){char* number_a = "10089328947197491751797009791032";char* number_b = "837190274291741974109721921321451";std::cout << number_a << " * " << number_b << " = " << std::endl;char* result = multi(number_a, number_b);std::cout << result << std::endl;delete[] result;return 0;}
输出:

10089328947197491751797009791032 * 837190274291741974109721921321451 = 08446688068723880396297437187783381747295407214602740206809027432

作者:csdn博客 Caroline-Wendy