C语言,范围内37倍数的和

题目:输入一个整数n,输出小于n并且能被37整除的所有自然数之和。没有则输出0。
例如:输入 75
输出 111
输入较小的数字时是正确的,而输入999则出现实际与预期输出不符,这是为什么,请各路人士帮忙看看。

img

img

注意观察: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;
}

执行结果

img

另外,这个循环遍历用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;
}