zoukankan      html  css  js  c++  java
  • 8617 阶乘数字和

    时间限制:500MS  内存限制:1000K 提交次数:224 通过次数:64

    题型编程题   语言: C++;C

    Description

    我们知道一个数的阶乘n! = 1*2*……*n一般是一个很大的数。现在要计算的是一个数阶乘之后得出来的数所有位上的数字相加的和。 

    输入格式

    输入为多case输入。每个case只有一行,输入一个正整数n(1<=n <= 50),当输入0时结束

    输出格式

    一个整数。

    输入样例

    5

    2

    输出样例

    3

    /*这里模拟了大数乘法来计算高精度阶乘*/
    #include<stdio.h>
    #include<string.h>
    #define MAX 100
    int main()
    {
        int f[MAX];/*通过修改数组大小可以计算更大的阶乘*/
        int i,j,s,k,n,sum;
        while(1)
        {
            memset(f,0,sizeof(f));
            f[0]=1;/*这个必须要有*/
            sum=0;
            scanf("%d",&n);
            if(n==0) break;
            for(i=2; i<=n; i++)
            {
                k=0;/*k是进位*/
                for(j=0; j<MAX; j++)//比如计算5!初始化结果 1 0 0 0 0 0 0 0。。。。
                {                   //2分别乘以以上数字,得 2 0 0 0 0 0 0 0。。。。
                    s=i*f[j]+k;     //3分别乘以以上数字,得 6 0 0 0 0 0 0 0。。。。
                    f[j]=s%10;      //4分别乘以以上数字,得 4 2 0 0 0 0 0 0。。。。
                    k=s/10;         //5分别乘以以上数字,得 0 2 1 0 0 0 0 0。。。。
                }
            }
            for(i=MAX-1; i>=0; i--) if(f[i]) break;/*由于是逆序存放结果,应去除后面多余的0*/
            for(j=i; j>=0; j--) sum+=f[j];
            printf("%d
    ",sum);
        }
    }
    /*很明显,这个算法是很不高效的,应为有很多次的沈余运算*/
    View Code

    2

    Time:15ms

  • 相关阅读:
    概率派VS贝叶斯派
    Numpy-数组array操作
    Numpy基础
    PCA基本原理
    编程语言
    卷积神经网络基础
    IntelliJ IDEA Merge
    Mybatis 问题总结
    Lambda用法
    Map键值对取值, key是在"|"转义, value是在::取值
  • 原文地址:https://www.cnblogs.com/orchidzjl/p/4209519.html
Copyright © 2011-2022 走看看