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> 

#define    M   1000

 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);

}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-10-08
#include <stdio.h>
#include <math.h>
void main()
{
double sum=1, i=1;
do
{
sum = sum * i;
i++;
}while(i<=100);
printf("%lf\n",sum);
}

追问

哦,为什么要用double sum 呢?我用的int。。。

void main() 我也用的int main 。。。

追答

int一般在编译器中存放的是4个字节,4个字节的存储范围小于100的阶乘,所以用double8个字节
int main 也行的,那么你就在 printf("%lf\n",sum);这条语句下加return 0;

追问

哦哦。这样哦。谢谢啊。

本回答被提问者采纳
第2个回答  2013-10-09

int i=1;


double result=1;

do

{

result=result*i;

i++;

}while(i!=101);


//result 的结果就是阶乘的结果

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网