zoukankan      html  css  js  c++  java
  • 阶乘的和高精度

    【题目描述】
    用高精度计算出
    S=1!+2!+3!+…+n!(n≤50)
    S=1!+2!+3!+…+n!(n≤50)
    ,其中“
    !
    !
    ”表示阶乘,例如:
    5!=5×4×3×2×1
    5!=5×4×3×2×1

    输入正整数
    n
    n
    ,输出计算结果
    S
    S

    【输入】
    一个正整数
    n
    n

    【输出】
    计算结果
    S
    S

    【输入样例】
    5
    【输出样例】
    153

    #include<iostream>
    using namespace std;
    int f[99000];
    int sum[99000];
    void sum1(int len)//计算每一次的和
    {
        for(int i=0;i<len;i++)
        {
            sum[i]+=f[i];
            sum[i+1]+=sum[i]/10;
            sum[i]%=10;
        }
    
    }
    int main()
    {
    	f[0] = 1;
    	sum[0]=1;
    	int n, temp;
    	int dight;
    	dight = 1;//记录数组的长度。
    	cin >> n;
    	for (int i = 2; i <= n; i++)
    	{
    
    		int num = 0;
    		for (int j = 0; j < dight; j++)
    		{
    			temp = f[j] * i + num;
    			f[j] = temp % 10;
    			num = temp / 10;
    		}
    		while (num)//num数位余数因为阶乘中余数可能会很大,所以加一个if循环来保证进位成功
    		{
    			f[dight] = num % 10;
    			num /= 10;
    			dight++;
    		}
    		sum1(dight);//因为阶乘的长度是最大的和sum数组不可能大于f数组的
    
    	}
    	for (int i = dight-1; i >= 0; i--)//输出
    	{
    		cout << sum[i];
    		if (i == 0)
    			cout << endl;
    	}
    	return 0;
    }
    
    

    学习是个循循渐进的过程,应该先打好基础,才能走的更远。

    追求吾之所爱
  • 相关阅读:
    【bzoj1878】[SDOI2009]HH的项链
    【bzoj2821】作诗(Poetize)
    【bzoj2120】数颜色
    PAT 乙级真题 1005.德才论
    PAT 乙级真题 1004.福尔摩斯的约会
    博客园使用悬挂猫(上吊猫)置顶插件
    PAT 乙级真题 1002.数字分类
    AcWing 789.数的范围
    AcWing 788.逆序对的数量
    二分查找
  • 原文地址:https://www.cnblogs.com/rstz/p/12393224.html
Copyright © 2011-2022 走看看