社区讨论
高精度求调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 条回复,欢迎继续交流。
正在加载回复...