// MySqrt.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
float mySqrt(char*n,int size){
if (n[0]=='-')
{
return -1;
}
float integ=0.00f;//字符的整数部分
float integres = 1.00f;//整数部分的开方
float base = 0.10f; //小数位数
float dec = 0.00f;//每个字符的属于小数部分
float decfres = 0.00f;//所有小数的集合;
float fnum = 0.00f;//字符串取出来最终的数
float k = 1.00f;//小数部分的增长数
int i = 0;
while (n[i]!='.')//先拿出整数位
{
if (n[i] > '0'&&n[i] <= '9')
{
integ = integ * 10 + n[i]-48.0f;
}
else
{
break;
}
i++;
}
while ((integres*integres)<integ) //整数部分的开方
{
++integres;
if ((integres*integres)>integ)
{
integres -= 1;
break;
}
else if
((integres*integres) == integ){
break;
}
}
for (int j = i+1; j < (size+i+1);j++) //拿出小数位i+1跳过'.'开始找数字
{
if (n[j] > '0'&&n[j] <= '9')
{
dec = n[j] - 48.0f;
}
else
{
dec = 0;
}
decfres += dec*base;
base /= 10;
}
fnum= decfres + integ;//将原字符串的整数部分和小数部分整合成为一个浮点数
while ((integres + (k*base))*(integres + (k*base)) < fnum){
++k;
if ((integres + (k*base))*(integres + (k*base)) > fnum)
{
k -= 1.0f;
break;
}
else if ((integres + (k*base))*(integres + (k*base)) == fnum)
{
break;
}
}
return (integres + (k*base));
}
int _tmain(int argc, _TCHAR* argv[])
{
printf("%.4f\n", mySqrt("5.0d",4));
return 0;
}
09-14
769
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
02-09
2520
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)