7-38 数列求和-加强版 (20 分)

给定某数字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

 算法思想:比如输入1   3,则说明和中包含三个一,两个十和一个一百,则sum=1*3+10*2+100*1,除此之外还需要需要对进位处理。

#include
#include
using namespace std;
int main(){
    int m,n;
    cin>>m>>n;
    if(n==0){
        cout<<0;
        return 0;
    }
    int sum=0;
    string str;
    int t;
    for(int i=n;i>0;i--){
        sum+=m*i;             //有i个m,即示例中3个1,两个10,1个100,并相加
        t=sum%10;            //取最小位即为第n-i+1位,也就是个十百千万...逐位相取
        str.push_back(t+'0');  //将当前位倒序存入字符串中,length加一
        sum/=10;            //除去最小位取得进位,在与下一位相加,如此循环
    }
    while(sum){       //上述循环只处理到n位,当结果大于n位时,需要对第n位的进位处理
        t=sum%10;
        str.push_back(t+'0');
        sum/=10;
    }
    for(int i=str.length()-1;i>=0;i--){
        cout<

 

你可能感兴趣的:(C++)