如題,在電腦測1000!也不過才0.250s
但是他(網頁)說1s
實在是搞不清楚,應該也沒有掉到無限迴圈內
以下是程式碼,幫我看看哪邊有問題= =,感恩~
#include<stdio.h>
int main(){
int num[2000]={0};
int n;
int c,c2;
int l;
while(scanf("%d",&n)!=EOF){
num[0]=1;
for(c=1;c<2000;c++)num[c]=0;
for(c=1;c<=n;c++){
for(c2=0;c2<1999;c2++){//將每一個位數都乘以要乘上的數字 如(2 4)*5 就會被分開乘->(10 20)
num[c2]*=c;
}
for(c2=0;c2<1999;c2++){//計算進位用剛剛的(10 20) 就會變成 (1 2 0)
num[c2+1]+=num[c2]/10;
num[c2]%=10;
}
}
printf("%d!\n",n);//印出n!
for(l=1999;num[l]==0;l--);//計算要印出的長度
for(c=l;c>=0;c--){//印出
printf("%d",num[c]);
}
printf("\n");
}
}
如題,在電腦測1000!也不過才0.250s
但是他(網頁)說1s
實在是搞不清楚,應該也沒有掉到無限迴圈內
以下是程式碼,幫我看看哪邊有問題= =,感恩~
#include
int main(){
int num[2000]={0};
int n;
int c,c2;
int l;
while(scanf("%d",&n)!=EOF){
num[0]=1;
for(c=1;c<2000;c++)num[c]=0;
for(c=1;c<=n;c++){
for(c2=0;c2<1999;c2++){//將每一個位數都乘以要乘上的數字 如(2 4)*5 就會被分開乘->(10 20)
num[c2]*=c;
}
for(c2=0;c2<1999;c2++){//計算進位用剛剛的(10 20) 就會變成 (1 2 0)
num[c2+1]+=num[c2]/10;
num[c2]%=10;
}
}
printf("%d!\n",n);//印出n!
for(l=1999;num[l]==0;l--);//計算要印出的長度
for(c=l;c>=0;c--){//印出
printf("%d",num[c]);
}
printf("\n");
}
}
那如果我給你1000筆1000 ?
要跑 250 s . .
如題,在電腦測1000!也不過才0.250s
但是他(網頁)說1s
實在是搞不清楚,應該也沒有掉到無限迴圈內
以下是程式碼,幫我看看哪邊有問題= =,感恩~
#include
int main(){
int num[2000]={0};
int n;
int c,c2;
int l;
while(scanf("%d",&n)!=EOF){
num[0]=1;
for(c=1;c<2000;c++)num[c]=0;
for(c=1;c<=n;c++){
for(c2=0;c2<1999;c2++){//將每一個位數都乘以要乘上的數字 如(2 4)*5 就會被分開乘->(10 20)
num[c2]*=c;
}
for(c2=0;c2<1999;c2++){//計算進位用剛剛的(10 20) 就會變成 (1 2 0)
num[c2+1]+=num[c2]/10;
num[c2]%=10;
}
}
printf("%d!\n",n);//印出n!
for(l=1999;num[l]==0;l--);//計算要印出的長度
for(c=l;c>=0;c--){//印出
printf("%d",num[c]);
}
printf("\n");
}
}
#include<iostream>
#include<cstdio>
using namespace std;
int i;
void chengfa(int s[],int d)
{
for(int j=0;j<i;j++)
s[j]*=d;
for(int j=0;j<i;j++)
if(s[j]>=10)
{
if(j==i-1)i++;
if(s[j+1]<0)s[j+1]=0;
s[j+1]+=s[j]/10;
s[j]%=10;
}
else if(s[j]<0)s[j]=-1;
}
void jiecheng(int z[],int k)
{
for(int i=1;i<k;i++)chengfa(z,i);
}
int main()
{
int s;
while(cin>>s)
{
cout<<s<<'!'<<endl;
int a[100000],z=s;
for(i=0;i<99999;i++)a[i]=-1;
i=0;
while(s>0)
{
a[i]=s%10;
i++;
s/=10;
}
jiecheng(a,z);
for(;a[i]<0;i--);
for(;i>=0;i--)printf("%d",a[i]);
cout<<endl;
}
return 0;
}
0.4s的
似乎位数太少了……
如題,在電腦測1000!也不過才0.250s
但是他(網頁)說1s
實在是搞不清楚,應該也沒有掉到無限迴圈內
以下是程式碼,幫我看看哪邊有問題= =,感恩~
#include
int main(){
int num[2000]={0};
int n;
int c,c2;
int l;
while(scanf("%d",&n)!=EOF){
num[0]=1;
for(c=1;c<2000;c++)num[c]=0;
for(c=1;c<=n;c++){
for(c2=0;c2<1999;c2++){//將每一個位數都乘以要乘上的數字 如(2 4)*5 就會被分開乘->(10 20)
num[c2]*=c;
}
for(c2=0;c2<1999;c2++){//計算進位用剛剛的(10 20) 就會變成 (1 2 0)
num[c2+1]+=num[c2]/10;
num[c2]%=10;
}
}
printf("%d!\n",n);//印出n!
for(l=1999;num[l]==0;l--);//計算要印出的長度
for(c=l;c>=0;c--){//印出
printf("%d",num[c]);
}
printf("\n");
}
}
#include
#include
using namespace std;
int i;
void chengfa(int s[],int d)
{
for(int j=0;j s[j]*=d;
for(int j=0;j if(s[j]>=10)
{
if(j==i-1)i++;
if(s[j+1]<0)s[j+1]=0;
s[j+1]+=s[j]/10;
s[j]%=10;
}
else if(s[j]<0)s[j]=-1;
}
void jiecheng(int z[],int k)
{
for(int i=1;i}
int main()
{
int s;
while(cin>>s)
{
cout< int a[100000],z=s;
for(i=0;i<99999;i++)a[i]=-1;
i=0;
while(s>0)
{
a[i]=s%10;
i++;
s/=10;
}
jiecheng(a,z);
for(;a[i]<0;i--);
for(;i>=0;i--)printf("%d",a[i]);
cout< }
return 0;
}
0.4s的
似乎位数太少了……
希望你看得懂