我写的代码有什么错?求解释

对于问题:给定a和n,计算a+aa+aaa+aaaa+...+a...a(n个a) 的和。我写的用C写的代码如下:
#include
#include
int f(int i,int a);
int main(){
int a,n;
long sum;
scanf("%d%d",&a,&n);
for(int i=1,sum=0;i<=n;i++){
sum+=f(i,a); //对于i的每次循环,调用f函数
}
printf("%ld",sum);
return 0;
}
//对于i变量,求出a*11...11(i个1)
int f(int i,int a){ //例如当i=4
int j;
for(j=0;i>=1;i--){
j+=pow(10,i-1); //当i=4时,则有j=10^3+10^2+10^1+10^0=1111,正好是4个1
}
return a*j; //返回a*1111

}
请问各位大神,我错哪了

5个回答

for(j=0;i>=1;i--) 这里有问题,改成for(j=0;j>=1;j--)

在这里,j起到的是一个累计的作用,类似于sum,所以要初始化成0........并且要是按你说的改成for(j=0;j>=1;j--),j本来就等于0,还自减,不可能会满足判断条件j>=1的........

类型不匹配吧。pow() 的参数、返回值都是 double。

Tiger_Zhao
Tiger_Zhao 回复-凡星-: j+=(int)pow(10.0,(double)(i-1));
5 年多之前 回复
u013732045
-凡星- 那请问该怎么解决呢?
5 年多之前 回复

不怕超出int范围吗?

这个代码肯定不行的,只能用数组存每一位,不然很容易溢出

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐