问题描述:
给定某数字A(1≤A≤9)以及非负整数N(0≤N≤100000),求数列之和S=A+AA+AAA+⋯+AA⋯A(N个A)。例如A=1, N=3时,S=1+11+111=123。
输入格式:
输入数字A与非负整数N。
输出格式:
输出其N项数列之和S的值。
输入样例:
1 3
输出样例:
123
第1次提交代码:
#include<stdio.h>
double sum( int a, int n );
int main()
{
int A,N;
double S;
scanf("%d %d",&A,&N);
S=sum(A,N);
printf("%.0f",S);
}
double sum( int a, int n )
{
int i,m;
double result=0;
m=a;
for(i=0;i<n;i++)
{
result+=a;
a=a*10+m;
}
return result;
}
问题:
1.位数太大以至于不能用整型存储,只能用数组按位存储。
2.按位存储的过程中,每位相加后有可能是很多位数。
3.最终sum的位数一定不会大于N+1位。
第2次代码:
#include<stdio.h>
#define maxzie 100000
int sum( int a, int n , int *p);
int main()
{
int A,N,s[maxzie+1],count;
scanf("%d %d",&A,&N);
if(N!=0) //N=0的情况
{
count=sum(A,N,s);
for(count--;count>=0;count--) //低位在数组末尾
printf("%d",s[count]);
}
else printf("0");
}
int sum( int a, int n , int *p)
{
int i,m,remain=0,count=0;
for(i=0;i<n;i++)
{
m=a*(n-i)+remain;
p[i]=m%10;
remain=m/10;
count++; //count为数的位数
}
if(remain!=0)
{
p[i]=remain;
count++;
}
return count;
}
参考:
/https://blog.csdn.net/Aruasg/article/details/105000482/
/https://blog.csdn.net/qq_36913610/article/details/82025738/
/https://blog.csdn.net/kedacpu/article/details/103065822/