记录编号 112948 评测结果 AAAAAAAAAAAAAA
题目名称 [暑假培训2012] 残酷的数学老师 最终得分 100
用户昵称 Gravatar绕着指尖 是否通过 通过
代码语言 C++ 运行时间 0.088 s
提交时间 2014-07-17 19:37:16 内存使用 0.31 MiB
显示代码纯文本
#include <iostream>
#include <cstring>
#include <fstream>

using namespace std;

//#define fin cin
//#define fout cout

ifstream fin;
ofstream fout;

void fun(int *a,int &la,int *b,int lb)
{
	int i, j, c[10][15005], d[15005], ld;

	for (i = 1; i < 10; i++)
	{
		for (j = 0; j < la; j++)
		{
			c[i][j] = a[j] * i;
		}
	}

	memset(d,0,sizeof(d));
	for (i = 0; i < lb; i++)
	{
		if (b[i])
		{
			for (j = 0; j < la; j++)
			{
				d[i+j] += c[b[i]][j];
			}
		}
	}
	ld = la + lb - 1;

	for (i = 0; i < ld - 1; i++)
	{
		if (d[i] >= 10)
		{
			d[i+1] += d[i] / 10;
			d[i] %= 10;
		}
	}

	if (d[ld-1] >= 10)
	{
		d[ld] = d[ld-1] / 10;
		d[ld-1] %= 10;
		ld++;
	}

	la = ld;
	for (i = 0; i < la; i++)
	{
		a[i] = d[i];
	}

	return;
}

int main()
{
	fin.open("cruel1.in");
	fout.open("cruel1.out");
	int i, j, a[15005], la, n, b[15005], lb, p;

	memset(a,0,sizeof(a));
	memset(b,0,sizeof(b));

	fin >> n >> p;

	la = 0;
	while (n)
	{
		a[la++] = n % 10;
		n /= 10;
	}

	lb = 1;
	b[0] = 1;
	
	while (p != 1)
	{
		if (p % 2)
		{
			fun(b,lb,a,la);
		}
		fun(a,la,a,la);

		p /= 2;
	}
	fun(a,la,b,lb);

	j = 1;
	for (i = la-1; i >= 0; i--)
	{
		fout << a[i];
		if (!(j % 70))
		{
			fout << endl;
		}
	}
	fout << endl;

	return 0;
}