| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 640 人关注过本帖
标题:今天做 ACM 题时遇到的问题,请教各位!
只看楼主 加入收藏
WAACM
Rank: 1
等 级:新手上路
帖 子:19
专家分:3
注 册:2013-4-15
结帖率:25%
收藏
已结贴  问题点数:20 回复次数:7 
今天做 ACM 题时遇到的问题,请教各位!
题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
我自己的代码是:
程序代码:
# include <stdio.h>
# include <math.h>
void main()
{
    int num = 0;
    long x, y, i;
    for (i = 1; i < 100000; i++)
    {
        y = i + 100;
        x = i + 268;
        if ((y == sqrt(y) * sqrt(y)) && (x == sqrt(x) * sqrt(x)))
        {
            printf("The number is %ld", i);
            num++;

        }
    }
printf("The total is %d", num);
}

但是出错了!!!!
正确答案的代码在下面,我感觉我们两个的答案都一样啊!!!但是我的却是错误的,为什么啊???
望大神指点一二~~~
程序代码:
# include <stdio.h>
# include <math.h>
void main()
{
    long int i, x, y, z;
    for (i = 1; i < 100000; i++)
    {
        x = sqrt(i+100);
        y = sqrt(i+268);
        if (x * x == i+100 && y * y == i + 268)
            printf("\n%ld\n", i);
    }
}
2014-03-20 20:19
ying8501
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:6
帖 子:1092
专家分:1446
注 册:2008-11-24
收藏
得分:8 
可能是运算中double产生的一些误差吧?如下修改就可以了。
# include <stdio.h>
# include <math.h>
void main()
{
    int num = 0;
    long x, y, i;
    for (i = 1; i < 100000; i++)
    {
        y = i + 100;
        x = i + 268;
        if ((y == (int)sqrt(y) * (int)sqrt(y)) && (x == (int)sqrt(x) * (int)sqrt(x)))
        {
            printf("The number is %ld\n", i);
            num++;

        }
    }
    printf("The total is %d\n", num);
}
2014-03-21 08:59
lonely_21
Rank: 5Rank: 5
等 级:职业侠客
威 望:3
帖 子:108
专家分:395
注 册:2011-11-13
收藏
得分:0 
数据类型的转换问题
2014-03-21 09:19
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:6 
能不用sqrt尽量不用,做ACM尽快使用数学公式简化再解。
题目可以理解为:
X+100=i*i;
x+268=j*j;
合并起来就是(j+i)*(j-i)=168
然后两层循环解i,j,其中j>i、j+i<=168,这样解出来同时也考虑x为负值的情况。

倚天照海花无数,流水高山心自知。
2014-03-21 16:53
牧尘
Rank: 1
等 级:新手上路
帖 子:1
专家分:3
注 册:2014-3-21
收藏
得分:3 
感觉如果用上sqrt,程式反倒更复杂,应该是越简单越好吧
2014-03-21 17:35
WAACM
Rank: 1
等 级:新手上路
帖 子:19
专家分:3
注 册:2013-4-15
收藏
得分:0 
回复 2楼 ying8501
soga
这样子啊,还真没想到过这些
2014-03-22 16:59
WAACM
Rank: 1
等 级:新手上路
帖 子:19
专家分:3
注 册:2013-4-15
收藏
得分:0 
回复 4楼 nuciewth
看来我弱爆了~
2014-03-22 17:00
icanbestrong
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:100
专家分:138
注 册:2013-3-13
收藏
得分:3 
我觉得这样是为了避免误差,我在一本书上看到说在计算机中求根则很有可能变成.9999999...这种情况,所以平方则可以避免这种情况
2014-03-22 19:37
快速回复:今天做 ACM 题时遇到的问题,请教各位!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018813 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved