平方和阶乘
题目限制
时间限制 1000ms 内存限制 1000KiB
题目描述 Description
小明是一个数学渣渣,但是老师总是让他做一些很奇怪的题目。
这次小明又遇到麻烦了,老师告诉他一个数a,让他求出这个数平方的阶乘a1和这个数阶乘的平方a2,还要a1a2的和,和a1a2的非负数差;
在a很小的时候,小明勉强能死算出答案;但是a很大的时候,小明就崩溃了。
请你为小明编一个程序解决这个问题。
输入描述 Input Description
输入一个正整数a。(1<=a<=250)
输出描述 Output Description
第一行输出a平方的阶乘a1。
第二行输出a阶乘的平方a2。
第三行输出a1+a2的值。
第四行输出a1-a2的绝对值。
样例输入 Sample Input
3
样例输出 Sample Output
362880
36
362916
362844
数据范围及提示 Data Size & Hint
1<=a<=250;
数据大到不可想象,务必使用高精。(不用可能1个测试点也不过)
a1=(aa)!;a2=(a!)(a!);
思路点拔:由于本题数据很大,所以我们需要使用高精度进行求解,首先计算平方的阶乘,由于a的平方没有爆,所以我们就用一个int类型的变量存储a的平方的值,然后,我们就使用高精乘以低精的做法,然后我们那另一个数组把这个阶乘的结果复制一份,然后就使用纯粹的高精乘,然后就用一个高精加和一个高精减就可以了,唯一要强调的就是:数组开得有点多,所以不要搞混淆了。
上代码!!
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
int a[1000005]={
0,1},x,w=1,b[1000005]={
0,1},c[1000005],d[2000005],e[