社区讨论

高精度求调60pts(必回关)

P5739【深基7.例7】计算阶乘参与者 3已保存回复 3

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
3 条
当前快照
1 份
快照标识符
@mm08yst7
此快照首次捕获于
2026/02/24 14:51
2 周前
此快照最后确认于
2026/02/25 23:55
2 周前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
const int N = 1e4 + 5;
int k;
char to_char(int n)
{
	if(n == 0) return '0';
	if(n == 1) return '1';
	if(n == 2) return '2';
	if(n == 3) return '3';
	if(n == 4) return '4';
	if(n == 5) return '5';
	if(n == 6) return '6';
	if(n == 7) return '7';
	if(n == 8) return '8';
	if(n == 9) return '9';
}
int main()
{
	int n;
	cin >> n;
	n--;
	string s1 = "1";
	for(k = 1 ; k <= n ; k++)
	{
	int a[N] , b[N] , c[N];
    int n1 = s1.size();
    int w = k , sum = 0;
    while(w)
    {
    	sum++;
    	w /= 10;
	}
    int n = n1 + sum;
    for(int i = n1 - 1 ; i >= 0 ; i--)
    {
        a[n1 - i - 1] = s1[i] - '0';
    }
    for(int i = 0 ; i < n1 ; i++)
    {
        for(int j = 0 ; j < sum ; j++)
        {
            c[i + j] += a[i] * k;
            c[i + j + 1] += c[i + j] / 10;
            c[i + j] %= 10;
        }
    }
    while (c[n - 1] == 0 && n > 1) 
    {
        n--;
    }
    s1 = "\0";
    for (int i = n - 1; i >= 0; i--) 
    {
        s1 += to_char(c[i]);
	}
}
	int a[N] , b[N] , c[N];
    int n1 = s1.size();
    int w = k , sum = 0;
    while(w)
    {
    	sum++;
    	w /= 10;
	}
    int nw = n1 + sum;
    for(int i = nw - 1 ; i >= 0 ; i--)
    {
        a[n1 - i - 1] = s1[i] - '0';
    }
    for(int i = 0 ; i < nw ; i++)
    {
        for(int j = 0 ; j < sum ; j++)
        {
            c[i + j] += a[i];
            c[i + j + 1] += c[i + j] / 10;
            c[i + j] %= 10;
        }
    }
    while (c[nw - 1] == 0 && nw > 1) 
    {
        nw--;
    }
    s1 = "\0";
    for (int i = nw - 1; i >= 0; i--) 
    {
        s1 += to_char(c[i]);
	}
	cout << s1;
    return 0;
}

回复

3 条回复,欢迎继续交流。

正在加载回复...