题目:输入一个整数n,输出小于n并且能被37整除的所有自然数之和。没有则输出0。
例如:输入 75
输出 111
输入较小的数字时是正确的,而输入999则出现实际与预期输出不符,这是为什么,请各路人士帮忙看看。
注意观察:999是37的倍数(999=27*37),实际输出刚好比预计输出多999。
错误在于,要求的是“小于n”,而你的循环遍历是0到n+1,于是,如果n或n+1是37的倍数,此代码的输出结果就会比预计输出多n或n+1。
只需要把循环条件改成i<n-1即可:
#include<stdio.h>
int main()
{
int n,sum=0,i=0;
scanf("%d",&n);
if(n>=37)
{
while(i<n-1)
{
i++;
if(i%37==0)
sum+=i;
}
printf("%d",sum);
}
else printf("0");
return 0;
}
执行结果
另外,这个循环遍历用for循环比较好,而且不必每次加1,可以每次加37。我把我写的贴上:
#include<stdio.h>
int main()
{
int n,sum=0,i;
scanf("%d",&n);
for(i=0;i<n;i+=37){
sum+=i;
}
printf("%d",sum);
return 0;
}
#include<stdio.h>
int main()
{
int i,n,sum=0,num=0;
scanf("%d",&n);
for(i=37;i<n;i++)
{
if(i%37==0)
{
sum+=i;
num++;//多一个变量num,将符合条件的数字存起来用于累加
}
}
if(num=0)
{
printf("0\n");
}
else
{
printf("%d",sum);
}
return 0;
}
我帮你写好了:
#include<stdio.h>
#include<math.h>
double fun(int n)
{
int i;
double sum = 0;
for (i = 1;i < n;i++)
if (i % 37 == 0)
sum += i;
return sqrt(sum);
}
int main()
{
printf("s=%f\n", fun(1000));
system("pause");
return 0;
}
既然是37倍数才相加,那i就没必要每次加1啊,效率太低
你代码问题主要是i<=n是不对的。n是不包含在内的
int main()
{
int n,sum=0,i=37;
scanf("%d",&n);
if(n>=37)
{
while(i<n)
{
sum += i;
i+=37;
}
printf("%d",sum);
}
else
printf("0");
}
这题哪有那么复杂,写的越多错的越多
#include<stdio.h>
int main()
{
int i,n,sum=0;
scanf("%d",&n);
for(i=37;i<n;i+=37)
{
sum+=i;
}
printf("%d",sum);
return 0;
}