#include
<iostream>
using
namespace
std
;
int
sqrt
(
int
x
)
{
int
test
,
step
;
if
(
x
< 0)
return
-1;
if
(
x
== 0)
return
0;
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
()
{
int
S
[20],
i
;
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;
}
运行结果如下图所示:
第三个数34的开方结果不是5而是6,因为34-5*5=9,而6*6-34=2,2<9,所以开方结果取的是6.