#include<iostream>
#include<string>
using namespace std;
string multiply(string a, string b);
void add(char * a, char *b); //将b加到a上面。前提条件:a和b的长度一样长,并且最高位不会产生进位
void reverse(char* a);
void clear(char *a, int len);//将数据全部设置为字符‘0’
int main() {
string a, b;
cin >> a >> b;
string result = multiply(a, b);
cout << result <<endl;
return 0;
}
string multiply(string num1, string num2) {
if(num1=="0" || num2=="0") return "0";
int len1 = num1.length();
int len2 = num2.length();
int resultMaxLen = len1 + len2;
char * tmp = (char*) malloc(sizeof(char) * (resultMaxLen+1));
char * result = (char*) malloc(sizeof(char) * (resultMaxLen+1));
clear(tmp, resultMaxLen);
clear(result, resultMaxLen);
reverse(num1.begin(), num1.end());
reverse(num2.begin(), num2.end());
int i, j, carry;
for(i=0; i<len1; i++) {
carry = 0;
int a = num1[i] - '0';
for(j=0; j<len2; j++) {
int b = num2[j] - '0';
int c = a * b + carry;
tmp[i+j] = c % 10 + '0';
carry = c / 10;
}
tmp[i+j]= carry + '0';
add(result, tmp);
clear(tmp, resultMaxLen);
}
reverse(result);
if(result[0]=='0')
return result+1;
return result;
}
//前提条件:a和b的长度一样长,并且最高位不会产生进位
//函数功能:将b加到a上面
void add(char * a, char *b) {
int carry = 0;
for(int i=0; i<strlen(a); i++) {
int tmpa = a[i] - '0';
int tmpb = b[i] -'0';
int tmpSum = tmpa + tmpb + carry;
carry = tmpSum / 10;
a[i] = tmpSum % 10 + '0';
}
}
void reverse(char* a) {
int left = 0;
int right = strlen(a) - 1;
while(left<right) {
char tmp = a[left];
a[left] = a[right];
a[right] = tmp;
left++;
right--;
}
}
void clear(char *a, int len) {
for(int i=0; i<len; i++) {
a[i] = '0';
}
a[len] = '\0';
}
大数乘法
最新推荐文章于 2019-03-30 20:51:32 发布