zoukankan      html  css  js  c++  java
  • 关于大整数n!的问题!

    对于一个整数n,当n超过30之后,n!将会是一个比较大的数,而longlong类型将不能存储下这么大的数·,这是你只能用到高精度的知识,运用数组来存放这些数,呵呵!!看看下面的例子吧!!

    这是一道求1000!的例子,希望能对你有帮助!!!!

    #include<iostream>
    using namespace std;
    int main()
    {
     int n;
     int num[50001],c;
     int k;
        while(cin>>n)
     {
        memset(num,0,sizeof(num));//用0初始化!
      num[0]=1;
      for(int i=1;i<=n;i++)
      {   c=0;//表示进位!!
       for(int j=0;j<50001;j++)
         {   
        
          int s=num[j]*i+c;
           num[j]=s%10;
                      c=s/10;//进位数
         }
      }
        for(k=50000;k>=0;k--)
          if(num[k]==0)
                  break;
       for(int j=k;j>=0;j--)
                  cout<<num[j];
      
        cout<<endl;
        }
     return 0;
    }

     代码的进一步优化,因为int类型能存9位数,所以进一步优化代码如下:

    #include<iostream>
    using namespace std;
    int main()
    {
     int n;
     int num[20002],i,j,k,c;
     while(cin>>n)
     {
      memset(num,0,sizeof(num));
       num[0]=1;
      for(i=1;i<=n;i++)
      {
       c=0;
       for(j=0;j<=20001;j++)
       {
        int s=num[j]*i+c;
        num[j]=s%1000000;
         c=s/1000000;
       }
      }
       for(k=20001;k>=0;k--)
         if(num[k]!=0)
          break;
         cout<<num[k];
         for(i=k-1;i>=0;i--)
        printf("%06d",num[i]);//6位的数字不足的在前面加0!!
         cout<<endl;
      }
      return 0;
     }

  • 相关阅读:
    [置顶] MySQL Cluster初步学习资料整理--安装部署新特性性能测试等
    ubuntu下设置开机自启动项
    【JSP】Cookie的使用及保存中文,并用Cookie实现购物车功能
    汉语-词语:笑面虎
    汉语-词语:阴险
    汉语-词语:奸猾
    汉语-词语:奸诈
    汉语-词语:厚道
    汉语-词语:忠厚
    汉语-词语:狡猾
  • 原文地址:https://www.cnblogs.com/xiohao/p/2781516.html
Copyright © 2011-2022 走看看