秦冇甪饕 @ 2022-07-10 12:53:10
#include <bits/stdc++.h>
using namespace std;
int main()
{
int a[1005]={},c[1005]={},n,jw=0;
cin>>n;
a[1]=1;
int size=1;
for(int i=1;i<=n;i++)//i从1到n.
{
jw=0;
for(int j=1;j<=size;j++)
{
a[j]*=i+jw;
jw=a[j]/10;
a[j]%=10;
}
for(int j=1;j<=size;j++)
{
c[i]+=a[j]+jw;
jw=c[i]/10;
c[i]%=10;
}
if(a[size+1]>0) size++;
}
int i;
for (i=100;i>=0&&a[i]==0;i--);
for (;i>0;i--) cout<<a[i];
return 0;
}
by 秦冇甪饕 @ 2022-07-10 13:04:28
我又改了一下
#include <bits/stdc++.h>
using namespace std;
int main()
{
int a[1005]={},c[1005]={},n,jw=0;
cin>>n;
a[1]=1;
int size=1;
for(int i=1;i<=n;i++)//i从1到n.
{
jw=0;
for(int j=1;j<=size;j++)
{
a[j]*=a[j-1]+jw;
jw=a[j]/10;
a[j]%=10;
}
for(int j=1;j<=size;j++)
{
c[i]+=a[j];
if(c[i]>=10)
{
c[i+1]++;
c[i]-=10;
}
}
if(a[size+1]>0) size++;
}
int i;
for (i=100;i>=0&&c[i]==0;i--);
for (;i>=0;i--) cout<<c[i];
return 0;
}
by yuqirui @ 2022-07-13 11:31:34
我觉得会超时
你没有特判,应该让位数++,进位mod10,直到进位==0;
这是我的代码:
#include<bits/stdc++.h>
using namespace std;
int n,a[10100]= {1},la=1,ans,b[10100]= {0},lb=1;
void m(int c) {
int x=0;
for(int i=0; i<la; i++) {
a[i]=x+a[i]*c;
x=a[i]/10;
a[i]%=10;
}
while(x) {
a[la++]=x%10;
x/=10;
}
}
void q() {
int x=0;
lb=max(la,lb);
for(int i=0; i<lb; i++) {
b[i]=x+a[i]+b[i];
x=b[i]/10;
b[i]%=10;
}
while(x) {
b[lb++]=x%10;
x/=10;
}
}
int main() {
cin>>n;
for(int i=1; i<=n; i++) {
m(i);
q();
}
for(int i=lb-1; i>=0; i--) {
cout<<b[i];
}
return 0;
}
by yuqirui @ 2022-07-13 11:32:39
就很简洁
by yuqirui @ 2022-07-13 11:33:08
@秦冇甪饕
by 秦冇甪饕 @ 2022-07-14 14:00:36
@yuqirui Wow,感觉你进步了不少啊,都会灵活使用函数了!
by yuqirui @ 2022-07-14 14:18:03
en