鱼C论坛

 找回密码
 立即注册
查看: 2213|回复: 10

[已解决]求阶乘

[复制链接]
发表于 2019-5-21 22:54:57 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
我想了一下,不考虑c语言的常识性问题,
我这样编写一个求10以内的阶乘代码可不可取,反正编译运行的结果是不对的

  1. #include<stdio.h>

  2. int main()
  3. {
  4.         int i,n,j;
  5.        
  6.         printf("请输入要求的值:\n");
  7.         scanf("%d",&n,&j);
  8.         j = 1;

  9.         n = i;
  10.         i == 1 ;
  11.         while(i<=n)
  12.         {
  13.                
  14.                 j = j*i;
  15.                 i++;
  16.         }
  17.         printf("factorial of %d is: %.2f.\n ",n,j);

  18.         return 0;
  19. }
复制代码
最佳答案
2019-5-21 23:26:23
本帖最后由 jackz007 于 2019-5-21 23:28 编辑

      还是使用 for 循环比较有优势一些
  1. #include <stdio.h>

  2. int main()
  3. {
  4.         unsigned i , j , n                                   ;
  5.         
  6.         printf("请输入要求的值:\n")                           ;
  7.         scanf("%d" , & n)                                    ;
  8.         if(n > 0) {
  9.                 for(i = 1 , j = 1 ; i <= n ; i ++) j = j * i ;
  10.                 printf("factorial of %d is: %d.\n " , n , j) ;
  11.         }
  12. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-5-21 23:01:53 From FishC Mobile | 显示全部楼层
第8行,去掉,&j
第12行,i=1
第19行,%.2f换成%d。
手机打的,不知道格式会不会乱
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2019-5-21 23:26:23 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2019-5-21 23:28 编辑

      还是使用 for 循环比较有优势一些
  1. #include <stdio.h>

  2. int main()
  3. {
  4.         unsigned i , j , n                                   ;
  5.         
  6.         printf("请输入要求的值:\n")                           ;
  7.         scanf("%d" , & n)                                    ;
  8.         if(n > 0) {
  9.                 for(i = 1 , j = 1 ; i <= n ; i ++) j = j * i ;
  10.                 printf("factorial of %d is: %d.\n " , n , j) ;
  11.         }
  12. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-21 23:29:36 | 显示全部楼层
有点迷,看不懂你上面的代码
  1. #include <stdio.h>
  2. void main()
  3. {
  4.     int n, Nn = 1;
  5.     printf("请输入要求的值:\n");
  6.     scanf("%d", &n);
  7.     /*for循环求阶乘*/
  8.     if (n >= 0)
  9.     {
  10.         if ((n == 0) || (n == 1))
  11.         {
  12.             Nn = 1;
  13.         }
  14.         else
  15.         {
  16.             for (int i = 1; i <= n; i++)
  17.             {
  18.                 Nn = Nn * i;
  19.             }
  20.         }
  21.         printf("for循环求阶乘:\nn! = %ld", Nn);
  22.     }
  23.     else
  24.     {
  25.         printf("ERROR:正负错误\n");
  26.     }
  27. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-5-22 00:15:10 | 显示全部楼层
jackz007 发表于 2019-5-21 23:26
还是使用 for 循环比较有优势一些

后来我想了想,用了两种方式
(1)
  1. #include<stdio.h>

  2. int main()
  3. {
  4.         int i,n,j;
  5.        
  6.         printf("请输入要求的值:\n");
  7.         scanf("%d",&n);
  8.         i = 1;

  9.         j = 1;
  10.          
  11.         while(i<=n)
  12.         {
  13.                
  14.                 j = j*i;
  15.                 i++;
  16.         }
  17.         printf("factorial of %d is: %d\n ",n,j);

  18.         return 0;
  19. }
复制代码

(2)
  1. #include<stdio.h>

  2. int main()
  3. {
  4.         int i ,n ;
  5.         double sum = 1;
  6.         scanf("%d",&n);
  7.         for(i=1;i<=n;i++)
  8.              sum = sum*i;
  9.     printf("%d!=%.1f",n,sum);
  10.     printf("\n");
  11.        
  12.        
  13.         return 0;
  14. }
复制代码



第一种是纯属自己琢磨出来的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-5-22 00:16:15 | 显示全部楼层
pheron 发表于 2019-5-21 23:01
第8行,去掉,&j
第12行,i=1
第19行,%.2f换成%d。

谢谢,是这样的呢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-5-22 00:17:00 | 显示全部楼层
bin554385863 发表于 2019-5-21 23:29
有点迷,看不懂你上面的代码

谢谢,这个代码也挺好
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-5-30 22:43:04 | 显示全部楼层
jackz007 发表于 2019-5-21 23:26
还是使用 for 循环比较有优势一些

[img]刚刚又学了一种阶乘求法,感觉这个意思要更明了,嘻嘻[/img]
  1. #include<stdio.h>

  2. int main()
  3. {
  4.         int cont;
  5.   do
  6.    {
  7.           int a , S = 1 , b=1 ;
  8.        
  9.           printf("请输入要求阶乘的数:"); scanf("%d",&a);
  10.        
  11.      do
  12.            {
  13.                 S = S*b;
  14.                 b = b+1;
  15.                
  16.            } while (b <=a);
  17.          
  18.             printf("%d的阶乘为:%d\n",a,S);
  19.             puts("是否继续?");
  20.             printf("【Yes...0/No...9】\n");
  21.             scanf("%d",&cont);
  22.     } while ( cont == 0);
  23.    
  24.         return 0;
  25. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-30 22:55:02 From FishC Mobile | 显示全部楼层
本帖最后由 jackz007 于 2019-5-30 23:05 编辑

      差不多所有使用 do ... while 循环的地方,都可以用 for 循环取代,用 for 可以在循环开始前对多个变量进行初始化,单次循环结束~开始交接的时候,还有机会调整多个变量的值,当然,还有循环条件的判断,所有的这些都可以写在同一个括号里面,只要用分号、逗号把它们隔开就可以了,和 do ...while 语句相比,代码会简洁许多。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-5-30 23:03:27 From FishC Mobile | 显示全部楼层
嗯呐,刚刚开始学,还望大佬,以后多多指教
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-5-30 23:04:07 From FishC Mobile | 显示全部楼层
jackz007 发表于 2019-5-30 22:55
用 for 循环可以在循环开始前对多个变量进行初始化,单次循环结束~开始交接的时候,还有机会调整多个 ...

才刚学到变量初始化
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-1 05:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表