版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
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;
}