码迷,mamicode.com
首页 > 其他好文 > 详细

AC日记——阶乘之和 洛谷 P1009(高精度)

时间:2016-11-11 09:53:00      阅读:193      评论:0      收藏:0      [点我收藏+]

标签:输出   blog   tchar   using   scanf   格式   false   代码   putchar   

题目描述

用高精度计算出S=1!+2!+3!+…+n!(n≤50)

其中“!”表示阶乘,例如:5!=5*4*3*2*1。

输入输出格式

输入格式:

 

一个正整数N。

 

输出格式:

 

一个正整数S,表示计算结果。

 

输入输出样例

输入样例#1:
3
输出样例#1:
9



思路:
  本来以为是道水题
  结果,写了个用unsigned long long的简单的循环只有50分
  又看了一下范围和题目才开始写的高精度


来,上代码:
#include<cstdio>
#include<algorithm>

using namespace std;

int n,num[302],sum[302];

void long_multiply(int number)
{
    for(int i=0;i<=300;i++) num[i]*=number;
    for(int i=0;i<=300;i++)
    {
        if(num[i]>9)
        {
            num[i+1]+=num[i]/10;
            num[i]%=10;
        }
    }
}

void long_add()
{
    for(int i=0;i<=300;i++)
    {
        sum[i]+=num[i];
        if(sum[i]>9)
        {
            sum[i+1]+=sum[i]/10;
            sum[i]%=10;
        }
    }
}

void long_print()
{
    bool ok=false;
    for(int i=301;i>=0;i--)
    {
        if(sum[i]!=0&&!ok) ok=true;
        if(ok) putchar(sum[i]+48);
    }
    putchar(\n);
}

int main()
{
    num[0]=1;
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        long_multiply(i);
        long_add();
    }
    long_print();
    return 0;
}

 

AC日记——阶乘之和 洛谷 P1009(高精度)

标签:输出   blog   tchar   using   scanf   格式   false   代码   putchar   

原文地址:http://www.cnblogs.com/IUUUUUUUskyyy/p/6053062.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!