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

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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章