7-38 数列求和-加强版

给定某数字A(1≤A≤9)以及非负整数N(0≤N≤100000),求数列之和S=A+AA+AAA+⋯+AA⋯A(N个A)。例如A=1, N=3时,S=1+11+111=123。
输入格式:

输入数字A与非负整数N。
输出格式:

输出其N项数列之和S的值。
输入样例:

1 3

输出样例:

123
写题思路:一开始觉得将每个A合起来变成字符串,用stringstream其特性转换成数字相加就可以解决,结果还有超过整形的结果没办法,只能从“大数”入手,也就是利用数组将每个数字存到数组中根据题目要求要存到100000以上的数组才能行,代码如下:

#include
using namespace std;

struct test
{
    int num[100009];
    int size;        //位数
    test(){
        for(int i = 0; i < 100009; i++){
            num[i] = 0;
        }
        size = 0;
    }
}n;

int main(){
    int a, b, tmp = 0;
    cin>>a>>b;
    if(b == 0){
        printf("0");
        return 0;
    }
    for(int i = b; i > 0; i--){     //倒序加数,从个位数开始会有b个a相加,十位数会有(b - 1)个a相加...
        tmp += i * a;       
        n.num[n.size++] = tmp%10;   //每一位上只存一个数字
        tmp /= 10;					//多余的放到高位上继续处理
    }
    while(tmp){
        n.num[n.size++] = tmp%10;
        tmp /= 10; 
    }
    for(int i = n.size - 1; i >= 0; i--){
        printf("%d", n.num[i]);
    }
    return 0;
}

你可能感兴趣的:(7-38 数列求和-加强版)