SDUT 3792 Snow祝你元宵节快乐!

Snow祝你元宵节快乐!
Time Limit: 1000MS Memory Limit: 65536KB
Problem Description

元宵节到了,Snow 也准备一掷千金买汤圆来庆祝元宵节。Snow 非常慷慨,他将分享给你一定数量的汤圆,那么是多少个汤圆呢?答案是 n!(n 的阶乘)…… 嘻嘻别傻了,Snow 要分享给你的是 n! 的位数个汤圆,但前提是你得求出 n! 有多少位哦。

Input

输入数据有多组(数据组数不超过 500),到 EOF 结束。

每组数据输入 n (1 <= n <= 500)。

Output

对于每组数据,输出一行,表示 n! 的位数。

Example Input

1
20

Example Output

1
19

代码:

#include<stdio.h>
int main()
{
    int a[1000];
    int len, i, carry, n, num, product, j;
    while(~scanf("%d", &n))
    {
        len = 1;//有多少位
        a[0] = 1;
        num = 0;//长度
        for(i = 1; i <= n; i++)
        {
            carry = 0;
            for(j = 0; j < len; j++)
            {
                product = a[j] * i + carry;//计算当前位的乘积
                a[j] = product % 1000;//进位后的值通过乘积取余1000得到
                carry = product / 1000;//进位数通过乘积除以1000得到
            }
            a[j] = carry;
            if(carry) len++;//如果carry不为0代表进位成功,长度加一
        }
        num = num + (len-1) * 3;//每位有三个数,最后一位的数还不确定
        product = a[len-1];//求最后一位对应几位数
        while(product > 0)
        {
            num++;
            product = product / 10;
        }
        printf("%d\n", num);
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值