菜鸟问题!各位帮忙看一下下面这段代码!

lxas 2001-03-31 11:56:00
这段代码是用来死算勾股定理的边长可能,但是在a,b的数值过大便会出错。c的值
不对,如:a=500、c=287时c=265;a=300,b=256时c=300.
我想可能是和int的取值范围有关。请问如何改进!!!
#include<stdio.h>
main()
{
int a, b, c;

for(a=1; a<=100; a++)
for(b=1; b<=100; b++)
for(c=1; c<=100; c++)
{
if(a*a+b*b == c*c)
printf("%d , %d, %d \n", a, b, c);

}

}

...全文
91 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
lxas 2001-04-01
  • 打赏
  • 举报
回复
非要转换类型吗?
superwolf 2001-04-01
  • 打赏
  • 举报
回复
用float也可以。
magicblue 2001-04-01
  • 打赏
  • 举报
回复
to:Savagesky(野人) 
呵呵,不是随机数吧,int 型的范围在 -32768~~+32767内,当a为300时,a*a应为90000,但超过了int的范围,这时a*a的值应是(90000-65536)=24464,也就是说只能得到a*a的补码。c*c也一样,不是随机数。a=300,b=256时c=300.由此可看出a=24464,b=0,c=24464。即,a*a+b*b=c*c。
lxas 2001-04-01
  • 打赏
  • 举报
回复
如果不换成 long int 类型呢?
sundayboys 2001-04-01
  • 打赏
  • 举报
回复
呵呵,楼上说的对,a、b值大时,a*a+b*b早就超了int范围了,还是换成long int吧。
fiddleman 2001-04-01
  • 打赏
  • 举报
回复
int 型的范围在 -32768~~+32767内,而如果a、b的值太大,超过了范围,得出的c就是一个随机数,故而有你说的情况。可以将int 改为 long int (-2147483648~~+2147483647)
lxas 2001-04-01
  • 打赏
  • 举报
回复
多谢各位大侠!!!
NowCan 2001-04-01
  • 打赏
  • 举报
回复
用float不好,计算有误差的。
我不懂电脑 2001-04-01
  • 打赏
  • 举报
回复
不必,但你要对数据进行错误检查。

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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