C++ 求n!(普通版VS洪荒之力升级版)

来源:互联网 发布:淘宝卖的军粮是真的吗 编辑:程序博客网 时间:2024/05/17 03:11

求n!

1. 普通版(低精度)

#include <iostream>using namespace std;int main(){    int n;    int i,sum;    while(cin>>n)    {        sum=1;        for(i=1;i<=n;i++)        {            sum*=i;        }        cout<<sum<<endl;    }    return 0;}

**此外,也可以用递归函数完成

#include <iostream>using namespace std;int f(int n);int main(){    int n;    while(cin>>n)    {        if(n==0||n==1)            cout<<"1"<<endl;        else            cout<<f(n)<<endl;    }    return 0;}int f(int n){    if(n==0 || n==1)        return 1;    else        return n*f(n-1);}
此版本程序截图:发现随着n的增大会因精度有限出现错误

2. 洪荒之力升级版(高精度,可突破int自身的限制)

#include <iostream>using namespace std;int main(){    int n;    int i,j;    int a[100000];    //存运算结果    int p,add;      //p存储当前结果的位数,add为进位    while(cin>>n && n>=0)    {        a[1]=1;       //运算结果赋初值1        p=1;          //当前结果位数赋初值1        for(i=2;i<=n;i++)                 //循环与2,3,4.....n相乘        {            for(j=1,add=0;j<=p;j++)       //让a[]的每位与i相乘,且初始进位为0            {                a[j]=a[j]*i+add;                add=a[j]/10;              //求进位                a[j]%=10;                 //a[j]取余            }            while(add>0)                  //进位不为0            {                a[j]=add%10;                add/=10;                j++;            }            p=j-1;                        //将当前的位数赋给p        }        for(i=p;i>=2;i--)                 //a数组的前面是低位,后面是高位        {            cout<<a[i];        }        cout<<a[i]<<endl;    }    return 0;}


此版本程序截图:



1 0
原创粉丝点击