您的位置:首页 > 其它

九度OJ 1051:数字阶梯求和 (大数运算)

2015-10-21 20:17 239 查看
时间限制:1 秒

内存限制:32 兆

特殊判题:否

提交:6718

解决:2280

题目描述:

给定a和n,计算a+aa+aaa+a...a(n个a)的和。

输入:

测试数据有多组,输入a,n(1<=a<=9,1<=n<=100)。

输出:

对于每组输入,请输出结果。

样例输入:
1 10


样例输出:
1234567900


来源:2010年哈尔滨工业大学计算机研究生机试真题

思路:

会超出long long的表示范围,典型的大数运算,注意循环的方式,第n位的数要加n-i次。

sum[i] += a*(n-i);

代码:

#include <stdio.h>
 
int main(void)
{
    int n, a, i;
    unsigned int sum[100];
    int flag;
 
    while (scanf("%d%d",&a, &n) != EOF)
    {
        for (i=0; i<100; i++)
            sum[i] = 0;
 
        i = 0;
        do
        {
            sum[i] += a*(n-i);
            if (sum[i] >= 10)
            {
                sum[i+1] += sum[i]/10;
                sum[i] %= 10;
            }
            i++;
        } while(i<n);
 
        flag = 1;
        for (i=99; i>=0; i--)
        {
            if (flag)
            {
                if (sum[i] == 0)
                    continue;
                flag = 0;
            }
            printf("%d", sum[i]);
        }
        printf("\n");
    }
 
    return 0;
}
/**************************************************************
    Problem: 1051
    User: liangrx06
    Language: C
    Result: Accepted
    Time:0 ms
    Memory:912 kb
****************************************************************/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: