整数开方 sqrt
2014-02-26 14:10
232 查看
#include<iostream>
using namespace std;
int sqrt(int x)
{
inttest, step;
if(x < 0)
return-1;
if(x == 0)
return0;
step=
1<<15;
test=
0;
while(step != 0)
{
registerint h;
h=
(test + step) * (test + step);
if (h <= x)
test += step;
if (h == x)
break;
step>>= 1;
} //至此,已找到比根号下x小的最接近根号下x的值。
if(x-test*test<=(test+1)*(test+1)-x) //此步骤判断test还是test+1更接近根号下x
return test;
else
return test+1;
}
int
main()
{
[/b]
intS[20],i;
[/b]
cout<<"待开方数值:"<<endl;
for(i=0;i<20;i++)
{
S[i]=rand()0;
cout<<S[i]<<'\t';
}
cout<<endl<<"开方结果:"<<endl;
for(i=0;i<20;i++)
cout<<sqrt(S[i])<<'\t';
return 0;
}
运行结果如下图所示:
![](http://simg.sinajs.cn/blog7style/images/common/sg_trans.gif)
sqrt" TITLE="整数开方 sqrt" />
第三个数34的开方结果不是5而是6,因为34-5*5=9,而6*6-34=2,2<9,所以开方结果取的是6.
using namespace std;
int sqrt(int x)
{
inttest, step;
if(x < 0)
return-1;
if(x == 0)
return0;
step=
1<<15;
test=
0;
while(step != 0)
{
registerint h;
h=
(test + step) * (test + step);
if (h <= x)
test += step;
if (h == x)
break;
step>>= 1;
} //至此,已找到比根号下x小的最接近根号下x的值。
if(x-test*test<=(test+1)*(test+1)-x) //此步骤判断test还是test+1更接近根号下x
return test;
else
return test+1;
}
int
main()
{
[/b]
intS[20],i;
[/b]
cout<<"待开方数值:"<<endl;
for(i=0;i<20;i++)
{
S[i]=rand()0;
cout<<S[i]<<'\t';
}
cout<<endl<<"开方结果:"<<endl;
for(i=0;i<20;i++)
cout<<sqrt(S[i])<<'\t';
return 0;
}
运行结果如下图所示:
![](http://simg.sinajs.cn/blog7style/images/common/sg_trans.gif)
sqrt" TITLE="整数开方 sqrt" />
第三个数34的开方结果不是5而是6,因为34-5*5=9,而6*6-34=2,2<9,所以开方结果取的是6.
相关文章推荐
- 不用Sqrt,求整数开方问题(精确到0.001)
- 【c语言】 寻找十个整数中的最大值
- 每天一道LeetCode-----重新实现开方运算sqrt(x),只返回整数部分即可
- 【c语言】 输出一个整数的每一位
- C语言习题&nbsp;整数转换成字符串
- 超大整数开方&&灯
- C++&nbsp;&nbsp;输入一个整数输出…
- mysql warnings 和整数越界
- ACM: 大数运算(正整数)
- HDOJ&nbsp;&nbsp;1271&nbsp;&nbsp;&nbsp;整数对
- 正整数开方,不用sqrt
- 规划问题 0-1型整数规划解法…
- 正整数开方,不用sqrt
- 大整数加法 1002 A + B Problem II
- 两个整数&nbsp;X&nbsp;和&nbsp;Y&amp;n…
- ch01_ex16&nbsp;如果三个整数X,Y…
- 大整数的乘法——比较好的算法! (转…
- 【转载】javascript 整数保留…
- leetcode:Sqrt(x) 牛顿迭代法求整数开方
- Android tiled background[转]