Problem Description
数列求和是一类常见的问题,本题有一定的代表性:
求s=a+aa+aaa+aaaa+……+aa…aa(n位)
其中,a的值由键盘输入,位数n也由键盘输入。
Input
第一行输入a的值;
第二行输入位数n。
Output
输出对n个数完成求和运算后的结果。
比如a=3,n=6时,s=3+33+333+3333+33333+333333
Sample Input
3
6
Sample Output
370368
我的思路:
s=a+aa+aaa=a1+(a1+a10)+(a1+a10+a100)
总体循环n次(用i记录当前次序,即i从1-n),对于第i次循环循环i次(用j记录当前次序,即j从1~i),对于(第i次中的)第j次计算它的系数,第j次的系数是10的j-1次方,这里考虑,利用循环计算系数:默认系数是1,第一次不需要循环直接得到系数1,j>1时,循环j-1次m=m*10,在第j次循环结尾会获得当前系数,乘上a即得到(第i个数中的)第j个数,加完后系数(一定要)重置为1
我的解法:
#include<stdio.h>
int main(){
int a,n;
scanf("%d%d",&a,&n);
int i;
int sum=0;
int j,k;
int m=1;//第i个数里的第j个数的系数
// 1+11+111=1+(1+1*10)+(1+1*10+1*100)=123
for(i=1;i<=n;i++){//一共要加n个数 (所以循环n次,注意总体上分为n个数,后面还有拆分)
for(j=1;j<=i;j++){//第i个数里面拆分成i个数相加(所以循环i次)
for(k=1;k<j;k++){//计算第i个数里的第j个数的系数(第i个数里的第1个数系数为默认的1,不进入循环)
m*=10;
}
sum+=(a*m);//总数中加上第i个数里的第j个数
m=1;//必须要重置m=1
}
}
printf("%d\n",sum);
}