题目:
给定某数字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+11+111+1111,2+22+222+2222,5+55+555+5555...
列出竖式:(hh,还没学会高级功能·)
所以直接上代码:
关键理解: arr[cnt++]=(a*(n-i)+t)%10;
t=(a*(n-i)+t)/10;这两行代码的含义
if(t)
语句的目的是判断最后是否有进位,如果有进位,则将进位值存入数组arr
中。
#include<iostream>
using namespace std;
int arr[1000000],a,n,cnt,t;
int main(){
cin>>a>>n;
if(n==0){cout<<0;return 0;}
for(int i=0;i<n;i++){
//t就是要进位的数
//每次将A乘以当前剩余的数字个数,并加上之前的进位,然后取个位数作为当前位置的数字
arr[cnt++]=(a*(n-i)+t)%10;
//并将进位除以10得到新的进位值。
t=(a*(n-i)+t)/10;
}
if(t)arr[cnt++]=t;
for(int i=cnt-1;i>=0;i--)cout<<arr[i];
return 0;
}