C语言,小疑难,给个解答好吗

来源:百度知道 编辑:UC知道 时间:2024/05/24 03:03:16
题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制
解:
main()
{ int i,a,n;
long s=0;
scanf("%d,%d",&a,&n);
for(i=1;i<=n;i++)
{
s+=a;
a=a*10+a;//我知道这错了,可怎么个错法啊
}
printf("%ld",s);
}

改成这样就可以了:
main()
{ int i,a,b,n;
long s=0;
scanf("%d,%d",&a,&n);
b = a;
for(i=1;i<=n;i++)
{
s+=b;
b=b*10+a;//我知道这错了,可怎么个错法啊
}
printf("%ld",s);
}

你原来的程序中a是个一直在变的数。
比如说222,到第二步就是22×10+22了,就错了。
你要保证后面那个数不变,始终是你输入的数字才行。

#include<stdio.h>
main()
{ int i,a,n,t;
long s=0;
scanf("%d,%d",&a,&n);
t=a; //用t表示原始a,也就是最末尾
for(i=1;i<=n;i++)
{
s+=a;
a=a*10+t; //后面的a实际已经改变了.
}
printf("%ld",s);
}

逻辑错误,只需要改一个字.

main()
{ int i,a,n;
long s=0;
scanf("%d,%d",&a,&n);
for(i=1;i<=n;i++)
{
s+=a;
a=a*10+2;//把a改成2
}
printf("%ld",s);
}

其实就是没有给a初值
只要给他赋个初值就好了

完整程序如下:
(编绎环境在microsoft visual studio c++6.0)

#include<stdio.h>
#include<math.h>

void main