Chinaunix首页 | 论坛 | 博客
  • 博客访问: 216190
  • 博文数量: 68
  • 博客积分: 3120
  • 博客等级: 中校
  • 技术积分: 715
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-08 09:53
文章分类
文章存档

2012年(29)

2011年(3)

2010年(18)

2009年(18)

我的朋友

分类: C/C++

2012-01-25 15:18:32

问题:

n! means n × (n − 1) × ... × 3 × 2 × 1

For example, 10! = 10 × 9 × ... × 3 × 2 × 1 = 3628800,
and the sum of the digits in the number 10! is 3 + 6 + 2 + 8 + 8 + 0 + 0 = 27.

Find the sum of the digits in the number 100!


答案:648
#include
#include
#include

int main(void)
{
    char s[200] = {0};
    char t[200] = {0};
    char d[201] = {0};
    const int len = 200;

    int sum = 0;
    int i = 0, j = 0;
    int flag = 0;
    int m = 0, n = 0;
    int k = 0, ex = 0;
    s[0] = 2;

    for (i=3; i<100; i++)
    {
        m = i % 10;
        n = i / 10;

        if (m)
        {
            for (j=0; j            {
                k = (flag ? ex:0) + s[j]*m;
                if (k<10)
                {
                    t[j] = k;
                    flag = 0;
                }
                else
                {
                    t[j] = k % 10;
                    flag = 1;
                    ex = k / 10;
                }
            }

            k = s[len-2] * m + (flag ? ex:0);
            if (k<10)
            {
                t[len-2] = k;
                flag = 0;
            }
            else
            {
                t[len-2] = k % 10;
                t[len-1] = k / 10;
                flag = 0;
                ex = 0;
            }
        }
        if (n)
        {
            for (j=0; j            {
                k = (flag ? ex:0) + s[j]*n;
                if (k<10)
                {
                    d[j+1] = k;
                    flag = 0;
                }
                else
                {
                    d[j+1] = k % 10;
                    flag = 1;
                    ex = k / 10;
                }
            }

            k = s[len-2] * n + (flag ? ex:0);
            if (k<10)
            {
                d[len-1] = k;
                flag = 0;
            }
            else
            {
                d[len-1] = k % 10;
                d[len] = k / 10;
                flag = 0;
                ex = 0;
            }
        }

        for (j=0; j        {
            k = t[j] + d[j] + (flag ? 1:0);
            if (k<10)
            {
                s[j] = k;
                flag = 0;
            }
            else
            {
                s[j] = k%10;
                flag = 1;
            }
        }
        flag = 0;
        memset(t, 0, len);
        memset(d, 0, len);
    }

    for (i=0; i        sum += s[i];

    printf("The sum is %d\n", sum);

    return 0;
}

阅读(686) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~