zoukankan      html  css  js  c++  java
  • C++ 求阶乘 四种方法

               来总结下求阶乘的各种方法哈。

               写在最前:①各个代码仅仅是提供了求阶乘的思路,以便在实际须要时再来编码,代码并不健壮!②各个程序都在1到10内測试正确。

               代码一:

    #include<iostream>
    using namespace std;
    
    int fac(int);
    
    int main()
    {
    	int n;
    
    	while(cin>>n)
    	{
    		cout<<n<<"!= "<<fac(n)<<endl;
    	}
    
    	return 0;
    }
    
    int fac(int x)
    {
    	register int i,f=1;  //定义寄存器变量
    
    	for(i=1;i<=x;i++)
    		f*=i;
    
    	return f;
    }

                分析:该程序在每次输入n时,都会调用fac()来暴力计算以得到结果。

                代码二:

    #include<iostream>
    using namespace std;
    
    int a[11];
    
    void init();
    
    int main()
    {
    	init();
    
    	int n;
    
    	while(cin>>n)
    	{
    		cout<<n<<"!= "<<a[n]<<endl;
    	}
    
    	return 0;
    }
    
    void init()
    {
    	int i;
    
    	a[0]=1;
    	for(i=1;i<=10;i++)
    		a[i]=i*a[i-1];
    }

                 分析:该程序利用了数组记录已得到的结果,并在计算下一个结果时利用了已得到的结果。

                 代码三:

    #include<iostream>
    using namespace std;
    
    int fac(int);
    
    int main()
    {
    	int i;
    
    	for(i=1;i<=10;i++)
    	{
            cout<<i<<"!= "<<fac(i)<<endl;
    	}
    
    	return 0;
    }
    
    int fac(int x)
    {
    	static int f=1;   //静态局部变量
    
    	f*=x;
    
    	return f;
    }

                 分析:应该说该代码有用性最差,主要是来学习静态局部变量来了。

                代码四:

    #include<iostream>
    using namespace std;
    
    int fac(int);
    
    int main()
    {
    	int n;
    
    	while(cin>>n)
    	{
    		cout<<n<<"!= "<<fac(n)<<endl;
    	}
    
    	return 0;
    }
    
    int fac(int x)   //递归函数
    {
    	int f;
    
    	if(x==0 || x==1)
    		f=1;
    	else
    		f=fac(x-1)*x;
    
    	return f;
    }

                 分析:一直觉得递归技术非常奇妙。尽管在时间和空间方面都不是非常理想,但的确同意我们利用了以“模糊”的方式编程。对每一个细节不必锱铢必较了。

                 写在最后:程序是个非常奇妙的东西。编程是个非常重要的能力。

                 欢迎拍砖!
       

  • 相关阅读:
    hdu 4710 Balls Rearrangement()
    hdu 4707 Pet(DFS水过)
    hdu 4706 Children's Day(模拟)
    hdu 4712 Hamming Distance(随机函数暴力)
    csu 1305 Substring (后缀数组)
    csu 1306 Manor(优先队列)
    csu 1312 榜单(模拟题)
    csu 1303 Decimal (数论题)
    网络爬虫
    Python处理微信利器——itchat
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/3805918.html
Copyright © 2011-2022 走看看