求教 c语言 一个简单的数组问题 求a+aa+aaa+aaaa+aaaaa..........

#include<stdio.h>
#include<math.h>
int main()
{
int x[5],a,n,i,t=0,s=0;
scanf("%d%d",&a,&n);
for(;n>=0;n--)
{ for(i=1;i<=n;i++)
{ x[i]=s+a*pow(10,(i-1));
t=t+x[i]; }
}
printf("%d\n",t);
return 0;
}
这个程序可以运行,但是貌似有点小问题,求大神指教

第1个回答  2013-05-21
你这个算法写得有点小问题吧,首先,求这一类问题的思路是,先找9,99,999...(pow(10,i),然后通过a*(pow(10,i))/9算任何一个a,aa,aaa....
int main(void)
{
long int sum=0;//注意int最高32位,所以最大只能表示2^31,如果你输入的数据很大,那么求的和有可能越界,所以用long int 4个字节
int x[5];
int n=0;
int a=0;
scanf("%d %d",&n,&a);//输入的时候加入空格
int i=0;
int res=n;
for(;n>=1&&i<res;n--,i++)//注意,最后n=1,而不是0,因为从1-n,共n个,错误在这里,而且两个循环是同时的,而不是嵌套关系,如果嵌套的话,每次里面循环完了,x[i]的每一个值都是一样的,最后加出来的是最后一个aaaaa*5的结果,而不是所求的
{

x[i]=a*((pow(10,n))-1)/9
sum+=x[i];
}
printf("%d\n",sum);
}
第2个回答  2013-05-21
int a,n,s=0,i,foo=0;
//未做错误处理

scanf("%d,%d",&a,&n);
for(i=0;i<n;i++)
{
foo = foo * 10 + a;
s += foo;
}

printf("%d\n",s);
return 0;
第3个回答  2013-05-21
在VS2012环境中POW函数有重载问题。
改为x[i]=s+a*pow(10.0,(i-1));
数组可以改大一点。。
个人观点,如有错误见谅。
第4个回答  2013-05-21
int x[5] 太小了
一般整数可以表示九位数 888 888 888
int x[10]本回答被提问者采纳
相似回答