习题2.3 数列求和-加强版 (20 分)
如果用常规的算法来计算,发现最大值的结果是负数,因为已经超过了整数int'类型的最大值
所以思路是把每一位数字保存在一个数组里,然后把每一位数字给输出
#include<stdio.h>
int main()
{
int a[100000];
int t=0;//进位
int m;//暂时保存a[i]
int A,n,i;
scanf("%d %d",&A,&n);
for(i=0;i<n;i++)
a[i]=A;
if(n==0) printf("0");
else{
for(i=n-1;i>=1;i--){ //从最后一位开始计算
a[i]=a[i]*(i+1)+t; //有几位相加,那它的最后一位的大小就是n*a[i] 再加上进位的数字
m=a[i]; //暂时保存
a[i]%=10; //0 9的数字
t=m/10; //进位的数字
}
a[0]=A+t;//为什么不把a[0]也加入循环,,因为a[0]不需要再%10,它不用再进位了
for(i=0;i<n;i++)
printf("%d",a[i]);
}
}