题目内容:
编程计算 a+aa+aaa+…+aa…a(n个a)的值,n和a的值由键盘输入。例如,当n=4,a=2,表示计算2+22+222+2222的值。
程序运行结果示例:
Input a,n:
2,4↙
sum=2468
输入提示信息:"Input a,n:\n"
输入格式: "%d,%d"(先输入a,后输入n)
输出格式: "sum=%ld\n"
为避免出现格式错误,请直接拷贝粘贴题目中给的格式字符串和提示信息到你的程序中
小白的代码:
#include
int main()
{
printf("Input a,n:\n");
int a,n,m,v,x;
double k,u;
scanf("%d,%d",&a,&n);
m=0;
v=0;
x=0;
u=10.0;
for(k=0;k<=n;k++)
{
(int)m=a*pow(u,k);
v=v+m;
x=x+v;
}
printf("sum=%ld\n",(long int)v);
return 0;
}
那么问题来了,究竟哪里出错了,会让小白深陷泥潭无法走出
你想复杂了,用不到pow
scanf("%d,%d",&a,&n);
long sum = 0;
long a1 = a;
for (int i = 0; i < n; i++)
{
sum += a1;
a1 = a1 * 10 + a;
}
printf("sum=%ld\n",sum);
两个地方需要修改:
1. 循环终止条件应该是k<n,而不是k<=n。
2. 结果应输出x变量的值,而不是v变量的值
修改后的代码如下:
int main()
{
printf("Input a,n:\n");
int a, n, m, v, x;
double k, u;
scanf("%d,%d", &a, &n);
m = 0;
v = 0;
x = 0;
u = 10.0;
for (k = 0;k < n;k++)
{
(int)m = a*pow(u, k);
v = v + m;
x = x + v;
}
printf("sum=%ld\n", (long int)x);
return 0;
}
1、你的程序输出应该输出x而不是v
2、因为你的输入做了限制,2 4中间有个逗号。当你用中文的”,“输入是输出结果是0,因为没有按照输入的限制输入。
但是当你切换输入法到英文的时候,输入的“,”是符合输入限制的,这样才能输出正确结果。