poj2389 普通的大数乘法
= =、每次这种题目说只有40位 然而要开到100位,心里总是一万匹草泥马在奔腾;
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <stack>
#include <queue>
#include <map>
#include <set>
#include <vector>
#include <math.h>
#include <algorithm>
using namespace std;
#define LL long long
const double pi = acos(-1.0);
#define Len 200005
#define mod 19999997
const int INF = 0x3f3f3f3f;
#define exp 1e-6
int s1[200];
int s2[200];
int tep[200];
int ans[200];
char st1[200];
char st2[200];
void Init()
{
memset(ans,0,sizeof(ans));
memset(tep,0,sizeof(tep));
memset(s1,0,sizeof(s1));
memset(s2,0,sizeof(s2));
}
int init_st1()
{
int len,num;
len=strlen(st1);
num=0;
for(int i=len-1;i>=0;i--)
{
s1[num++]=st1[i]-'0';
}
return num;
}
int init_st2()
{
int len,num;
len=strlen(st2);
num=0;
for(int i=len-1;i>=0;i--)
{
s2[num++]=st2[i]-'0';
}
return num;
}
void add_solve()
{
int x,f=0;
int num=0;
for(int i=0;i<110;i++)
{
x=ans[i]+tep[i];
x+=f;
f=x/10;
ans[num++]=x%10;
}
if(f)
ans[num++]+=f;
}
void mul_solve(int num,int len,int n)
{
int x;
memset(tep,0,sizeof(tep));
int f=0;
for(int i=0;i<len;i++)
{
x=s1[i]*n;
x+=f;
f=x/10;
tep[num++]=x%10;
}
if(f)
tep[num++]+=f;
add_solve();
}
int main()
{
scanf("%s%s",st1,st2);
Init();
int L1=init_st1();
int L2=init_st2();
for(int i=0;i<L2;i++)
{
mul_solve(i,L1,s2[i]);
}
int k;
int flag=0;
for(int i=150;i>=0;i--)
{
if(ans[i])
{
flag=1;
k=i;
break;
}
}
if(!flag)
{
printf("0");
return 0;
}
for(int i=k;i>=0;i--)
{
printf("%d",ans[i]);
}
return 0;
}