比赛 NOIP2015普及组练习 评测结果 AAAAAAAAAAAA
题目名称 增强的乘法问题 最终得分 100
用户昵称 ミント 运行时间 0.017 s
代码语言 C++ 内存使用 0.29 MiB
提交时间 2015-11-05 11:57:41
显示代码纯文本
#include <fstream>
#include <algorithm>
#include <string>
#include <cstring>

using namespace std;

ifstream fin("mul.in");
ofstream fout("mul.out");

const int maxn = 200 + 50;
int reva[maxn];
int revb[maxn];
int ans[maxn+maxn];

void fswap(string &x, string &y)
{
	string temp;
	
	temp = x;
	x = y;
	y = temp;
	
	return ;
}
int main()
{
	memset(reva, 0, sizeof(reva));
	memset(revb, 0, sizeof(revb));
	memset(ans, 0, sizeof(ans));
	
	string a, b;
	
	fin>>a>>b;
	
	if(a=="0"||b=="0")
	{
		fout<<'0'<<endl;
		return 0;
	}
	else if(a.length()<b.length()||(a.length()==b.length())&&a<b)
		fswap(a, b);
	
	int la = a.length();
	int lb = b.length();
	
	for(int i=la-1;i>=0;i--)
		reva[la-i] = a[i] - '0';
	for(int i=lb-1;i>=0;i--)
		revb[lb-i] = b[i] - '0';
	for(int i=1;i<=la;i++)
	{
		for(int j=1;j<=lb;j++)
		{
			ans[i+j-1] = ans[i+j-1] + reva[i] * revb[j];
			ans[i+j] = ans[i+j] + ans[i+j-1] / 10;
			ans[i+j-1] = ans[i+j-1] % 10;
		}
	}
	int lans = la + lb;
	while(lans>0&&ans[lans]==0)
		if(ans[lans]==0)
			lans--;
	for(int i=lans;i>=1;i--)
		fout<<ans[i];
	fout<<endl;
	
	fin.close();
	fout.close();
	
	return 0;
}