解题思路:
变量描述:n代表s=a+aa+aaa+aaaa+aa...a中的a,cycle表示aa...a的位数(有多少个a),tmp表示每位数的和,tmpc表示有多少位(描述不清请看下面的例子)

思路:最终结果的位数不会超过2*cycle位,所以我们用一个长度为2*cycle的整型数组来保存结果,数组每一位初始化为0。

你要做的就是把循环计算把tmp的每一位累加到数组的相应位置。

举一个简单的例子:求2+22+222+2222时,我们并不依次累加求和,而是具体到每一位相加

2222

222


22



2

我们计算n=4*2+3*2+2*2+1*2,cycle=4,这就是一个由cycle决定循环次数的循环相加过程。其中tmpc就从4递减到1,tmp则是tmpc*n(这里n为2)。

接下来,要将每次tmp的每一位放到数组里,比如tmp=4*2=8,那么arr[i]应加8;若tmp=5*3=15,那么arr[i]应加15%10=5,arr[i-1]应加15/10=5(相加进位)。这也是一个一步步累加的过程。

循环后顺序输出不为0的数组元素就是我们要的答案了。

注意事项:
提示:自己举个简单的例子理解方法,这道题轻松解决~
参考代码:

#include<stdio.h>

int main(void)
{
	int n, cycle, i, j, tmp, tmpc;
	scanf("%d%d", &n, &cycle);
	int arr[2*cycle];
	tmpc = cycle;
	for(i=0; i<2*cycle; i++){
		arr[i] = 0;
	}
	for(i=2*cycle-1; i>=0 && tmpc>0; i--){
		tmp = tmpc*n;
		j = i;
		while(tmp != 0){
		 	arr[j]+=tmp%10;
		 	if(arr[j]>9){
		 		arr[j-1]+=arr[j] / 10;
		 		arr[j] = arr[j] % 10;
			}
		 	tmp/=10;
		 	j--;
		}
		tmpc--;
	}
	for(i=i+1; i<2*cycle; i++){
		printf("%d", arr[i]);
	}
	return 0;
}

结果截图:


点赞(0)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论