【9103】求n的累加和

Time Limit: 10 second
Memory Limit: 2 MB

问题描述
用高精度方法,求s=1+2+3+...+n的精确值(n以一般整数输入)

Input

文件输入仅一行,输入n

Output

s的值。

Sample Input

10

Sample Output

55

【题解】

就是高精度加单精度,加单精度的时候在第一位加上这个数字就好,然后从1到l进行一轮的进位即可。最后逆序输出。、

【代码】

#include <cstdio>

int a[100],n,l = 1;

void input_data()
{
    scanf("%d",&n);
}

void get_ans()
{
    for (int i = 1;i <= 99;i++) //先给每个位上的数置0
        a[i] = 0;
    for (int i = 1;i <= n;i++) //从1 累加到 n
        {
            a[1] += i; //直接在个位上递增i
            for (int i = 1;i <= l;i++) //然后来处理进位问题 直接 + / 然后%一下就好
                {
                    a[i+1] += (a[i]/10);
                    a[i] = a[i] % 10;
                }
            while (a[l+1] > 0) //延长位数。用一个while和l就能搞定
                {
                    l++;
                    a[l+1] += (a[l] / 10);
                    a[l] = a[l] % 10;
                }
        }
}

void output_ans() //最后要逆序输出答案。
{
    for (int i = l;i >= 1;i--)
        printf("%d",a[i]);
}

int main()
{
    input_data();
    get_ans();
    output_ans();
    return 0;
}


 

原文地址:https://www.cnblogs.com/AWCXV/p/7632435.html