信息学奥赛一本通 1172:求10000以内n的阶乘(高精度乘以单精度)

题目链接:点击这里
信息学奥赛一本通 1172:求10000以内n的阶乘(高精度乘以单精度)_第1张图片
蓝桥杯遇到过类似的题:点击这里
蓝桥杯这题数据量1000,此题为10000,最后两个测试点容易超时。

#include
#include
#include
#include
using namespace std;
const int N = 40000;
int ans[N];	//数组ans存放大整数结果,ans[0]存放个位,依次类推 

int main()
{
	int n;
	cin>>n;
	
	ans[0] = 1;
	int len = 1;
	int tmp, up=0;
	
	for(int i=2;i<=n;i++)   
	{
		for(int j=0;j<len;j++) 
		{
			tmp = ans[j]*i + up;	//每次数组的每一位都乘以i加上来自低位的进位
			up = tmp/10;	//处理进位
			ans[j] = tmp%10;
		}
		while(up>0)           //进行进位,并将m的值进行了加1
        {
			ans[len++] = up%10;
			up /= 10;
        }
	}
	
	for(int i=len-1;i>=0;i--)
	{
		if(ans[i])	//删除前导零 
		{
			for(int j=i;j>=0;j--)
				cout<<ans[j];
			break;
		}
	}
	return 0;
}
 

你可能感兴趣的:(高精度)