當前位置:編程學習大全網 - 編程語言 - c語言用do while 語句寫1x 2x 3 x 4 ....x 100,就是100的階乘,怎麽

c語言用do while 語句寫1x 2x 3 x 4 ....x 100,就是100的階乘,怎麽

妳好,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);

}

  • 上一篇:榮昌縣職業教育中心的簡介
  • 下一篇:怎麽做計劃並執行成功?
  • copyright 2024編程學習大全網