大数乘法。顺手把加法也写了。
#include<cstdio>
#include<string>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<iostream>
using namespace std;
#define N 20005
#define INF 1000000009
#define length 100
class Bignum{
char s[length * 2];
public :
Bignum(int x = 0){
memset(s, 0, sizeof(s));
s[0] = x;
}
void setnum(int x){
for(int i = 0; x; i++){
s[i] = x % 10;
x /= 10;
}
}
void setnum(){
char acstr[length];
scanf("%s", acstr);
int len = strlen(acstr);
memset(s, 0, sizeof(s));
for(int i = 0, j = len - 1; j >= 0; j--, i++){
s[i] = acstr[j] - '0';
}
}
void setnum(char *acstr){
int len = strlen(acstr);
memset(s, 0, sizeof(s));
for(int i = 0, j = len - 1; j >= 0; j--, i++){
s[i] = acstr[j] - '0';
}
}
Bignum operator+(Bignum x){
Bignum ans;
for(int i = 0; i < length; i++){
ans.s[i] += s[i] + x.s[i];
ans.s[i + 1] += ans.s[i] / 10;
ans.s[i] %= 10;
}
return ans;
}
Bignum operator*(Bignum x){
Bignum ans;
for(int i = 0; i < length; i++){
for(int j = 0; j < length; j++){
ans.s[i + j] += s[i] * x.s[j];
if(ans.s[i + j] >= 10){
ans.s[i + j + 1] += ans.s[i + j] / 10;
ans.s[i + j] %= 10;
}
}
}
for(int i = 0; i < length; i++){
if(ans.s[i] >= 10){
ans.s[i + 1] += ans.s[i] / 10;
ans.s[i] %= 10;
}
}
return ans;
}
void print(){
int i = length;
while(s[i] == 0)i--;
while(i >= 0)printf("%d", s[i--]);
printf("\n");
}
};
int main(){
Bignum a, b;
char aa[105];
char bb[105];
while(scanf("%s%s", aa, bb) != EOF){
a.setnum(aa);
b.setnum(bb);
a = a * b;
a.print();
}
return 0;
}