• 0058-简单的阶乘


    题目

    简单的阶乘
    难度级别:A; 运行时间限制:1000ms; 运行空间限制:51200KB; 代码长度限制:2000000B
    试题描述

    从键盘上输入一个自然数 n ,输出 n 的阶乘,即 n!。n!=1*2*3*……*n,特殊的,当 n=0 时,n!为 1 。

    输入
    一个不超过 12 的自然数 n
    输出
    一个正整数,表示 n!的值。
    输入示例
    5
    输出示例
    120

    分析

        这题是累加的升级版,但注意事项变多了:

            1.0的阶乘是1。

            2.ans初始值必须给1,不管全局还是局部,全局不赋一,任何数的阶乘都是0。局部不赋1,输出的数吓死你。

    代码

    #include<bits/stdc++.h>
    using namespace std;
    int n,ans=1;//ans别忘了初始值给1,不然任何数的阶乘都是0,同时也能保证n=0时,n!=1。
    int main()
    {
    	scanf("%d",&n);
    	for(int i=1;i<=n;i++) ans*=i;//累乘。
    	printf("%d",ans);
    	return 0;
    }
    

        除以上正解代码外,本题还可以使用平方和公式求解,不知道平方和公式的上网百度。

        下面介绍一种令新手们无比佩服的方法:打表(注意不是坐出租车)。

        打表,专门针对一些数据范围较小的题。一般使用打表的有以下两种情况:

            1.没有思路。

            2.自己的方法会超时。

        下面讲如何打表。

        首先,你需要算出数据范围内每个输入所对应的答案。一般采用手算+计算器。

        对于这道题,上网百度12以内阶乘,再用swich打表就行。

    #include<bits/stdc++.h>
    using namespace std;
    int n;
    int main()
    {
    	scanf("%d",&n);
    	switch(n)
    	{
    		case 1:printf("1");break;//开始打表。
    		case 2:printf("2");break;
    		case 3:printf("6");break;
    		case 4:printf("24");break;
    		case 5:printf("120");break;
    		case 6:printf("720");break;
    		case 7:printf("5040");break;
    		case 8:printf("40320");break;
    		case 9:printf("362880");break;
    		case 10:printf("3628800");break;
    		case 11:printf("39916800");break;
    		case 12:printf("479001600");
    	}
    	return 0;
    }
    

        很神奇是不是?

    作者:18西斯光剑
    出处:https://www.cnblogs.com/DARTH-VADER-EMPIRE/
    Copyright ©2018-2020 18西斯光剑
    All Rights Reserved.
  • 相关阅读:
    中国首届React开发者大会 8月18日 广州举行
    事件循环:Flutter 中代码是如何执行和运行的
    大前端趋势所向:这么多跨端技术,为什么选择 Flutter?
    通往大前端的一把关键钥匙 Flutter
    如何选一部好的手机?性价比高的智能手机推荐,2020智能手机排行榜!
    智能手机边充电边玩对电池有什么损害吗?
    你的智能手机究竟能用多久?
    新型添加技术
    智能手机
    姐姐不愧是姐姐,快看《乘风破浪的姐姐》
  • 原文地址:https://www.cnblogs.com/DARTH-VADER-EMPIRE/p/9552749.html
Copyright © 2020-2023  润新知