妳好,100的階乘結果大概有150位,用簡單的do while語句是無法計算準確的結果的(結果最後100多位全是0,而正確的結果0也就20個左右)。
程序1:
#include<stdio.h>?#defineM1000
main() {? int?a[M],?i,?n,?j,?flag?=?1;? printf("n=");? scanf("%d",&n);? printf("n!="); a[0]?=?1;? for(i?=?1;?i?<?M;?i++)a[i]?=?0;?
for(j?=?2;?j?<=?n;?j++)? {for(i?=?0;?i?<?flag;?i++)
a[i]?*=?j;
for(i?=?0;?i?<?flag;?i++)?
if(a[i]?>=?10)?
{?
a[i+1]?+=?a[i]/10; a[i]?=?a[i]?%?10; if(i?==?flag-1)? flag++;?}
} for(j?=?flag?-?1;j?>=?0;?j--)printf("%d",?a[j]);
} 程序2:#include?<stdio.h>#include?<string.h>
void?f(int?n)
{
void?cheng(char?s[],int?n); void?jia(char?s1[],?char?s2[]); int?jinwei=0,?bai,?shi,?ge,?num; char?b[1000],?c[1000]; static?char?a[1000]={"1"}; strcpy(b,a); strcpy(c,a); num=strlen(a); bai?=?n/100; shi?=?n%100/10; ge?=?n%10; cheng(a,?ge); if(shi) { cheng(b,?shi); num=strlen(b); b[num]=48; b[num+1]=0; jia(a,?b); } if(bai) { cheng(c,?bai); num=strlen(c); c[num]=48; c[num+1]=48; c[num+2]=0; jia(a,?c); } printf("%d%d%d!=",bai,shi,ge); puts(a);}
void?jia(char?s1[],?char?s2[])
{
int?i,?m,?n,?k,?jinwei=0; m=strlen(s1); n=strlen(s2); if(m>=n) { for(i=n;?i>=0;?i--)s2[i+m-n]=s2[i];
for(i=0;?i<m-n;?i++)s2[i]=48;
} else { for(i=m;?i>=0;?i--)s1[i+n-m]=s1[i];
for(i=0;?i<n-m;?i++)s1[i]=48;
} for(i=m-1;?i>=0;?i--) { k=s1[i]+s2[i]+jinwei-96; s1[i]=k%10+48; jinwei=k/10; } if(jinwei) { for(i=m;?i>=1;?i--)s1[i]=s1[i-1];
s1[0]=49; s1[m+1]=0; }}
void?cheng(char?s[],?int?x)
{
int?i,?m,?n,?jinwei=0; n=strlen(s); for(i=n-1;?i>=0;?i--) { m=(s[i]-48)*x+jinwei; s[i]=m%10+48; jinwei=m/10; } if(jinwei) { {for(i=n;?i>=1;?i--)
s[i]=s[i-1];
s[0]=jinwei+48;
} s[n+1]=0; }}
void?main()
{
int?i,?n; printf("請輸入1--150之內的整數!"); scanf("%d",&n); if(n>0&&n<=150) for(i=1;?i<=n;?i++)f(i);
}