描述
输入两个高精度正整数M和N(M和N均小于100位)。求这两个高精度数的积。
格式
输入格式
输入两个高精度正整数M和N。
输出格式
求这两个高精度数的积。
样例
输入样例
36 3
输出样例
108
#include <iostream>
#include <stdio.h>
#include <cstring>
#include <stdio.h>
#include <algorithm>
#include <cmath>
using namespace std;
//#define N 10001
char a[101];
char b[101];
char c[501];
char d[501];
int cnt;
void add(char a[],char b[], int len){
int flag = 0;
cnt = 0;
for(int i=0; i<len; ++i){
if(a[i] == '\0'){
a[i] = 0;
}
if(b[i] == '\0'){
b[i] = 0;
}
int sum = (a[i] + b[i] ) + flag;
flag = sum/10;
sum = sum%10;
d[cnt++] = sum;
}
if(flag>=1){
d[cnt++] += flag;
}
// for(int i=cnt-1; i>=0; --i) {
// printf("%d", d[i]);
// }
// printf("\n");
}
void Reverse(char arr[], int len){
for(int i=0; i<len/2; ++i){
char ch = arr[i];
arr[i] = arr[len - i - 1];
arr[len - i - 1] = ch;
}
}
int chen(char a[],char b[], int lena, int lenb){
int flag = 0, i, j;
// printf("%d %d\n",lena, lenb);
for(j=0; j<lenb; ++j){
flag = 0;
int cnt = 0;
for(i=0; i<lena; ++i){
// printf("%c %c %d\n", a[i], b[j], flag);
int t = ( a[i] - '0' ) * (b[j] - '0') + flag;
flag = t/10;
t = t%10;
c[cnt++] = t;
// printf("t = %d %d\n",t,flag);
}
if(flag >= 1){
c[cnt++] = flag;
}
for(int k=cnt-1 + j; k>=j; --k){
c[k] = c[k-j];
}
for(int k=0; k<j; ++k){
c[k] = 0;
}
cnt += j;
add(c, d, cnt);
//
// printf("res = ");
// for(int k=cnt-1; k>=0; --k){
// printf("%d ", c[k]);
// }
// printf("\n");
}
}
int main(){
cin>>a>>b;
for(int i=0; i<500; ++i){
d[i] = 0;
}
int lena = strlen(a);
int lenb = strlen(b);
Reverse(a, lena);
Reverse(b, lenb);
int len = max(lena, lenb);
if(len == lena){
chen(a, b, lena, lenb);
}else{
chen(b, a, lenb, lena);
}
for(int i=cnt-1; i>=0; --i) {
printf("%d", d[i]);
}
printf("\n");
return 0;
}