题目
给定某数字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
//思路,竖式加法思路,从个位到第一位计算,对十取余数,余数计入数组,整数部分进位
#include <stdio.h>
int main(){
int A, N, X, i = 0, ret = 0;
int a[100005] = {0};
scanf("%d %d", &A, &N);
while(N != 0 || ret != 0){ //结束条件N位数计算完且余数也计算完
X = N * A + ret; //该为数加上前面所进位的数
a[++i] = X % 10; //余数计入数组(首元素不赋值,便于后面输出,指针的使用技巧)
ret = X / 10; //ret存放需要进位的数,不会超过9万
if(N != 0) N--; //如果N个数组位置用完,还需处理ret,此时N不必自减
}
if(i == 0) printf("0"); //若以上循环未进行,说明输入N为0,i未自增,输出0
while(i != 0){
printf("%d", a[i--]); //从后往前输出
}
return 0;
}