关于完全平方数

题目1:输出1-999999之间的完全平方数

程序一

#include <stdio.h>
#define MAX 999999


int main()

int i=1;
    long int square=1;
    while (square <= MAX)
    {
printf("%ld/t",square);
i++;
        square = (i*i);
    }
printf("/n");
return 0;
}

 
程序二

#include <stdio.h>
#define MAX 999999


int main()

int i=1;
    long int square=1;
    while (square <= MAX)
    {
printf("%ld/t",square);
square+=(i+=2);
    }
printf("/n");
return 0;
}

=========================

题目2:一个小于999999整数,它加上100后是一个完全平方数,再加上268又是一个完全平方数,请问该数是多少?

程序一

#include <stdio.h>
#include <math.h>

int main()

long x=-100;

    while(x <=999999)
{
long double i=sqrt(x+100);
long double j=sqrt(x+268);
if((long)i==i&&(long)j==j) printf("%ld/t",x);
x++;
}

return 0;
}


程序二

#include <stdio.h>
#include <math.h>
/*算法分析:m^2=x+268 
    n^2=x+100
两式相减得(m+n)*(m-n)=168
以此为条件判断
*/
int main()
{
long int x=0;
for(long int m=1;m <=3200;m++)  //sqrt(999999) <=3200
{
for(long int n=1;n <=3200;n++)
{
x=n*n-100;
if((m+n)*(m-n)==168)
printf("%ld/t",x);
}
}

return 0;
}


===============

判断一个数是否是完全平方数  n^2=1+3+......+(2n-1)

int  yysquare(int x)

    int i = 1;
    for(;n>0;i+=2) n-=i; 
    if(0!=n)return -1;
    return 0; 
}

因为计算机在内部存储数据的时候一个很小的数字也会当成0来处理,所以用开方后是不是整数这一条件来判断会不会出什么问题?浮点数记录的是近似值,所以使用sqrt函数得到的可能不是真值,这样有没有可能导致程序出现类似情况:
执行程序有 sqrt(i+100)*sqrt(i+100)==i+100;
但其实i+100开方后的真值与sqrt(i+100)并不相等,从而导致出现误判。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值