给定某数字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<iostream>
#include<string>
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<<str[i];
}
}