鱼C论坛

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

[已解决]求阶乘

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

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

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

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

int main()
{
        int i,n,j;
        
        printf("请输入要求的值:\n"); 
        scanf("%d",&n,&j);
        j = 1;

        n = i;
        i == 1 ;
        while(i<=n)
        {
                
                j = j*i;
                i++;
        }
        printf("factorial of %d is: %.2f.\n ",n,j);

        return 0;
 }
最佳答案
2019-5-21 23:26:23
本帖最后由 jackz007 于 2019-5-21 23:28 编辑

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

int main()
{
        unsigned i , j , n                                   ;
        
        printf("请输入要求的值:\n")                           ;
        scanf("%d" , & n)                                    ;
        if(n > 0) {
                for(i = 1 , j = 1 ; i <= n ; i ++) j = j * i ;
                printf("factorial of %d is: %d.\n " , n , j) ;
        }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

使用道具 举报

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

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

int main()
{
        unsigned i , j , n                                   ;
        
        printf("请输入要求的值:\n")                           ;
        scanf("%d" , & n)                                    ;
        if(n > 0) {
                for(i = 1 , j = 1 ; i <= n ; i ++) j = j * i ;
                printf("factorial of %d is: %d.\n " , n , j) ;
        }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-21 23:29:36 | 显示全部楼层
有点迷,看不懂你上面的代码
#include <stdio.h>
void main()
{
    int n, Nn = 1;
    printf("请输入要求的值:\n");
    scanf("%d", &n);
    /*for循环求阶乘*/
    if (n >= 0)
    {
        if ((n == 0) || (n == 1))
        {
            Nn = 1;
        }
        else
        {
            for (int i = 1; i <= n; i++)
            {
                Nn = Nn * i;
            }
        }
        printf("for循环求阶乘:\nn! = %ld", Nn);
    }
    else
    {
        printf("ERROR:正负错误\n");
    }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

int main()
{
        int i,n,j;
        
        printf("请输入要求的值:\n"); 
        scanf("%d",&n);
        i = 1;

        j = 1;
         
        while(i<=n)
        {
                
                j = j*i;
                i++;
        }
        printf("factorial of %d is: %d\n ",n,j);

        return 0;
 } 
(2)
#include<stdio.h>

int main()
{
        int i ,n ;
        double sum = 1;
        scanf("%d",&n);
        for(i=1;i<=n;i++)
             sum = sum*i;
    printf("%d!=%.1f",n,sum);
    printf("\n");
        
        
        return 0;
}


第一种是纯属自己琢磨出来的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

谢谢,是这样的呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

谢谢,这个代码也挺好
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

int main()
{
        int cont;
  do
   {
          int a , S = 1 , b=1 ;
        
          printf("请输入要求阶乘的数:"); scanf("%d",&a);
        
     do
           {
                S = S*b;
                b = b+1;
                
           } while (b <=a);
         
            printf("%d的阶乘为:%d\n",a,S);
            puts("是否继续?");
            printf("【Yes...0/No...9】\n");
            scanf("%d",&cont);
    } while ( cont == 0);
    
        return 0;
 } 
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

使用道具 举报

 楼主| 发表于 2019-5-30 23:03:27 From FishC Mobile | 显示全部楼层
嗯呐,刚刚开始学,还望大佬,以后多多指教
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

才刚学到变量初始化
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-3 19:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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