C++编程判断一个数是否是平方数,如25为是平方数!!

xiamin 2006-02-20 11:30:01
判断一个数是否是平方数,如25为是平方数!!
...全文
4074 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
nicky1981 2006-02-22
  • 打赏
  • 举报
回复
证明:

1+3+5+7+...+(2n-1)
= (1+(2n-1) ) * n / 2
= 2n * n / 2
= n*n

----------
不错
Dogfish 2006-02-22
  • 打赏
  • 举报
回复 3
(int)sqrt(num)*(int)sqrt(num) == num
tacittui 2006-02-22
  • 打赏
  • 举报
回复
初中学的
a^2 - b^2 == (a+b)*(a-b)

还说要用归纳法,实在是太搞笑了
NoInfoNoFear 2006-02-22
  • 打赏
  • 举报
回复
证明:

1+3+5+7+...+(2n-1)
= (1+(2n-1) ) * n / 2
= 2n * n / 2
= n*n
Darkay_Lee 2006-02-22
  • 打赏
  • 举报
回复
用计算机来判断浮点数确实是个问题。
另外,提醒一下考虑效率的各位,sqrt所花的时间不是可以忽略不计的:)
Zricepig 2006-02-22
  • 打赏
  • 举报
回复
平方数是针对整数域来说的
不存在说0.25是平方数的概念吧
crystal_heart 2006-02-21
  • 打赏
  • 举报
回复
bool IsSqrt( int n )
{
int i = 1;
while( n>0 )
{
n -= i;
i += 2;
}
return 0==n ? true : false;
}
weilong122 2006-02-21
  • 打赏
  • 举报
回复
在循环内尽量少作判断是考虑到效率的原故吧?
weilong122 2006-02-21
  • 打赏
  • 举报
回复
zh2817() ,Darkay_Lee() 俩位的做法都很好,感谢!!!!
Darkay_Lee 2006-02-21
  • 打赏
  • 举报
回复
改进了一下,不在循环里面做太多判断:
int main(void)
{
int n;
cin >> n;

int sum = 0;
for(int i=1; ; i+=2)
{
sum += i;
if(sum >= n)
{
break;
}
}
if(sum == n)
cout << "yes" << endl;
else
cout << "no" << endl;
}
Darkay_Lee 2006-02-21
  • 打赏
  • 举报
回复
to:jiajun2001(嘉俊)
不需要归纳发啦:
1+3+...+(2n-1),共n个数,求和公式是:
((1+(2n-1)) * n)/2 == n*n
因此你的命题正确。
利用此命题的结果得到的算法如下:
#include <iostream>
using namespace std;

int main(void)
{
int n;
cin >> n;

int sum = 0;
for(int i=1; ; i+=2)
{
sum += i;
if(sum == n)
{
cout << "yes";
break;
}
else if(sum > n)
{
cout << "no";
break;
}
}
}
罗嘉贇 2006-02-21
  • 打赏
  • 举报
回复
请考虑一下double 到 int的误差
zh2817 2006-02-21
  • 打赏
  • 举报
回复
程序如下:
#include<iostream>
#include<cmath>
using namespace std;
void main()
{
int n;
int m;
cout<<"请输入:";
cin>>n;
cout<<endl;
m = sqrt(n);
if(m * m == n)
cout<<"是平方数"<<endl;
else
cout<<"不是平方数"<<endl;
}
uncleAndyChen 2006-02-21
  • 打赏
  • 举报
回复
答案都有了,就只好UP一把了
sankt 2006-02-21
  • 打赏
  • 举报
回复

对于给定一个整数N
定义一个整型数M
int M = sqrt(N);
然后判断
if(M*M == N)
则N是平方数;
else
N不是平方数;

//=========
正解
Jagen在路上 2006-02-21
  • 打赏
  • 举报
回复
楼上的利用了数学归纳法,但是需要证明才可使用。
EarthKing 2006-02-21
  • 打赏
  • 举报
回复
1 = 1
4 = 1 + 3
9 = 1 + 3 + 5
16 = 1 + 3 + 5 + 7
25 = 1 + 3 + 5 + 7 + 9
36 = 1 + 3 + 5 + 7 + 9 + 11
....
chon81 2006-02-21
  • 打赏
  • 举报
回复
floor(sqrt(num))*floor(sqrt(num)) == num
xiaocai0001 2006-02-21
  • 打赏
  • 举报
回复
想干什么啊?

对于给定一个整数N
定义一个整型数M
int M = sqrt(N);
然后判断
if(M*M == N)
则N是平方数;
else
N不是平方数;
EarthKing 2006-02-21
  • 打赏
  • 举报
回复
数学归纳法....这个是数学书上的公式还需要再证明么....-_-
加载更多回复(5)
C/C++语言经典实用趣味程序设计编程百例精解C/C++语言经典实用趣味程序设计编程百例精解(1)1.绘制余弦曲线 2.绘制余弦曲线和直线 3.绘制圆 4.歌星大奖赛 5.求最大 6.高次方的尾 7.阶乘尾零的个 8.借书方案知多少 9.杨辉三角形 10.制转换 C/C++语言经典实用趣味程序设计编程百例精解(2)11.打鱼还是晒网 12.抓交通肇事犯 13.该存多少钱 14.怎样存钱利最大 15.捕鱼和分鱼 16.出售金鱼 17.平分七筐鱼 18.有限5位 19.8除不尽的自然 20.一个奇异的三位C/C++语言经典实用趣味程序设计编程百例精解(3)21.4位反序 22.求车速 23.由两个平方三位获得三个平方二位 24.阿姆斯特朗 25.完全 26.亲密 27.自守 28.回文 29.求具有abcd=(ab+cd)2性质的四位 30.求素 C/C++语言经典实用趣味程序设计编程百例精解(4)31.歌德巴赫猜想 32.可逆素 33.回文素 34.要发就发 35.素幻方 36.百钱百鸡问题 37.爱因斯坦的学题 38.换分币 39.年龄几何 40.三色球问题C/C++语言经典实用趣味程序设计编程百例精解(5)41.马克思手稿中的学题 42.最大公约和最小公倍 43.分比较 44.分之和 45.将真分分解为埃及分 46.列出真分序列 47.计算分的精确值 48.新娘和新郞 49.委派任务 50.谁在说谎 C/C++语言经典实用趣味程序设计编程百例精解(6)51.谁是窃贼 52.黑与白 53.迷语博士的难题(1) 54.迷语博士的难题(2) 55.哪个大夫哪天值班 56.区分旅客国籍 57.谁家孩子跑最慢 58.拉丁方阵 59.填表格 60.1~9分成1:2:3的三个3位 C/C++语言经典实用趣味程序设计编程百例精解(7)61.1~9组成三个3位的平方 62.由8个整形成奇特的立方体 63.减式还原 64.乘式还原 65.乘式还原(2) 66.除式还原(1) 67.除式还原(2) 68.九位累进可除 69.魔术师的猜牌术(1) 70.魔术师的猜牌术(2) C/C++语言经典实用趣味程序设计编程百例精解(8)71.约瑟夫问题 72.邮票组合 73.和能表示1~23的5个正整 74.可称1~40磅的4块砝码 75.10个小孩分糖果 76.小明买书 77.波松瓦酒的分酒趣题 78.求π的近似值 79.求π的近似值(2) 80.奇平方一个有趣性质 C/C++语言经典实用趣味程序设计编程百例精解(9)81.角谷猜想 82.四方定理 83.卡布列克常 84.尼科彻斯定理 85.回文的形成 86.自动发牌 87.黑白子交换 88.常胜将军 89.抢30 90.搬山游戏 C/C++语言经典实用趣味程序设计编程百例精解(10)91.人机猜游戏 92.人机猜游戏(2) 93.汉诺塔 94.兎子产子 95.将阿拉伯字转换为罗马字 96.选美比赛 97.满足特异条件的列 98.八皇后问题 99.超长正整的加法 100.字移动

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧