7-38 数列求和-加强版 (20 分)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_44720323/article/details/101226158

7-38 数列求和-加强版 (20 分)

这个题和之前的一个阶乘问题比较相似,因为要防止数据溢出,所以都要要用数组来保存数字的位数。
在这个问题中同样用这样的方法。
1、用count来记录位数,用index来指示进位。
2、这个问题中有一个地方我没有优化好,就是第一个元素的输出有的时候还是0。所以最后用了flag标志,来消除错误的输出。

#include <stdio.h>
#include <stdlib.h>

int main()
{
	int a,n;
	int count = 0;
	int index = 0;
	int b[1000000] = {0};
	int temp;
	int flag = 1;
	scanf("%d %d",&a,&n);
	for(int i=0;i<n;i++)
	{
		temp = a*(n-i);
		index = count;
		while(temp){
			b[index] += temp%10;
			temp /= 10;
			if(b[index] >= 10)
			{
				b[index] -= 10;
				b[index+1] += 1;
			}
			index++;
		}
		count++;
	}
	for(int j=count;j>=0;j--)
	{
		if(flag && b[count] == 0){
			flag = 0;
			continue;
		}
		printf("%d",b[j]);
	}
    if(n == 0) printf("0\n");
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_44720323/article/details/101226158