首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我有这个问题语句(如下所示),当我对输入30进行测试时,答案应该是6,但我得到的结果是0。为什么?

我有这个问题语句(如下所示),当我对输入30进行测试时,答案应该是6,但我得到的结果是0。为什么?
EN

Stack Overflow用户
提问于 2016-08-07 16:57:23
回答 2查看 63关注 0票数 0

给定一个正整数N,找出N^2的小于N但不除N的正整数因数的数目。约束: 1<=N<=(10^12)

代码语言:javascript
复制
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>

int main()
{
    float N;
    scanf("%f",&N);

    float nsq = N*N;
    float i;
    int count = 0;

    for(i=1.0f; i<N; i=i+1.0f)
    {
        if(fmodf(nsq,i))

        {
            count++;
            if(fmodf(N,i))
                count--;
        }
    }

    printf("%d", count);


    return 0;
}
EN

回答 2

Stack Overflow用户

发布于 2016-08-07 17:04:20

如果余数是零,那么对象是可除的,但If语句不会被接受,因为0.0f值被视为false。

您必须将函数fmodf与0的结果进行比较:

代码语言:javascript
复制
if(fmodf(nsq,i) == 0.0f)

如果上一句不清楚,那么对第二个If语句也必须执行同样的操作。

还要注意,使用浮点进行迭代是错误的。对于小于10^12的大值,结果将不适合连续的整数,并且迭代将不再正确工作。

函数fmodf的结果也会出现类似的问题。在某一时刻,该函数将开始停止返回零,即使对于明显可除的运算符也是如此。

票数 0
EN

Stack Overflow用户

发布于 2016-08-07 18:02:23

代码语言:javascript
复制
    #include <stdio.h>
      #include <string.h>
    #include <math.h>
    #include <stdlib.h>

int main()
{
    float N;
    scanf("%f",&N);

    float nsq = N*N;
    float i;
    int count = 0;

    for(i=1.0f; i<N; i=i+1.0f)
    {
        if(!fmodf(nsq,i))

        {
           // count++;
            if(fmodf(N,i))
                count++;
        }
    }

    printf("%d", count);


    return 0;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38812515

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档