加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

大数处理问题

发布时间:2020-12-14 04:37:10 所属栏目:大数据 来源:网络整理
导读:1.求N的阶乘(10000以内的整数) 未优化前的代码 // 计算 N! 30 #includeiostream #include cstring using namespace std; const int maxn= 50000 ; int n,c,k,i,j,s; int f[maxn+ 1 ]; int main() { while (cin n){ // f[0]=1; memset(f, 0 , sizeof (f));

1.求N的阶乘(10000以内的整数)

未优化前的代码

//计算 N!  30
#include<iostream>
#include<cstring>
using namespace std;
const int maxn=50000;
int n,c,k,i,j,s;
int f[maxn+1];
int main() 
{
    while(cin>>n){
//        f[0]=1;
        memset(f,0,sizeof(f));
        f[0]=1;
        for(i=1;i<=n;i++){
            c=0;//表示进位
        for(j=0;j<=maxn;j++){
            s=f[j]*i+c;
            f[j]=s%10;
            c=s/10;
        } 
        }
        for(k=maxn;k>=0;k--)
        if(f[k]!=0) break;
        for(j=k;j>=0;j--)
        cout<<f[j];
        cout<<endl;
    }
}
View Code

优化后的代码输出有问题:?

eg:12!=479001600

程序输出:4790*1600 少了一个0?

//计算 N!  30
#include<iostream>
#include<cstring>
using namespace std;
const int maxn=20000;
int n,sizeof(f));
        f[0]=1;
        for(i=1;i<=n;i++){
            c=0;//表示进位
        for(j=0;j<=maxn;j++){
            s=f[j]*i+c;
            f[j]=s%100000;
            c=s/100000;
        } 
        }
        for(k=maxn;k>=0;k--)
        if(f[k]!=0) break;
        for(j=k;j>=0;j--)
        cout<<f[j];
        cout<<endl;
    }
}
View Code

MOD数的设定与N的范围有关N最大为10^4,所以MOD设定10^5,相乘最大不超过九位

?解决问题后的正确代码:

//计算 N!  30
#include<iostream>
#include<cstring>
using namespace std;
const int maxn=20000;
int n,sizeof(f));
        f[0]=1;
        for(i=1;i<=n;i++){
            c=0;//表示进位
        for(j=0;j<=maxn;j++){
            s=f[j]*i+c;
            f[j]=s%100000;
            c=s/100000;
        } 
        }

        for(k=maxn;k>=0;k--)
            if(f[k]!=0) break;
            cout<<f[k];
            for(j=k-1;j>=0;j--)
            printf("%05d",f[j]);//5位的数字不足前面添0 
            cout<<endl;
        }
}
View Code

2.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读