ACM入队刷题---数列求和(sdutoj1134)

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);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值