#include "mySqrt.hpp"
#include <iostream>
#include <string>
#include <assert.h>
using namespace std;
int *mySqrt(double, int max = 150);
double mySqrt1(double num, int max);
int main()
{
int num;
cout << "输入一个数:";
cin >> num;
int i = 1;
int *a = mySqrt(num);
cout << "√(" << num << ") = " << a[0];
if (a[i] != -1)
{
cout << ".";
}
while (a[i] != -1)
{
cout << a[i];
i++;
}
cout << endl;
// system("pause");
return 0;
// cout << mySqrt(25) << endl;
}
/*
num:需要开方的数字
max:精确到多少位
*/
int *mySqrt(double num, int max)
{
int *a = new int[max];
/*for (int w = 0; w < max; w++) {
a[w] = 0.0;
}*/
assert(num > 0);
int i = 1;
int d = 1;
double divisor; // 除数
// int divisor_Next; // 传给下一个后
double dividend; // 被除数
double down; // 下边的数
double trading; // 商
// double finalTrad;
while (i * i < num)
{
trading = i;
i++;
}
if (i * i == num)
{
a[0] = i;
a[1] = -1;
return a;
}
else
{
a[0] = (i - 1);
}
// cout << trading << endl;
dividend = num - (i - 1) * (i - 1);
// cout << dividend << endl;
divisor = trading * 20;
// cout << divisor << endl; //40
for (int j = 0; j < max; j++)
{
int k = 0;
for (k = 0; k <= 9; k++)
{
if ((divisor + k) * k >= dividend * 100)
{
//cout << (k - 1) << " ";
break;
}
}
a[d] = k - 1;
//cout << a[d] << " ";
// cout << "k" << k << endl;
dividend *= 100; // 除的数字 300 上边的数字
down = (divisor + (k - 1)) * (k - 1);
dividend = dividend - down;
// cout << "下边" << dividend << endl;
// cout << "下" << xia << endl;
// cout << dividend << endl;
trading = trading * 10 + (k - 1); // 最上边的最后的得数
// cout << trading << endl;
// cout << j << endl;
divisor = trading * 20; // 左边的数
d++;
}
// cout << d << endl;
// while ((d - 1) > 0)
// {
// trading /= 10.0;
// d--;
// }
// return trading;
a[d - 1] = -1;
return a;
// cout << " " << divisor;
}
double mySqrt1(double num, int max)
{
// assert(num > 0);
int i = 1;
int d = 1;
double divisor; // 除数
// int divisor_Next; // 传给下一个后
double dividend; // 被除数
double down; // 下边的数
double trading; // 商
// double finalTrad;
while (i * i < num)
{
trading = i;
i++;
if (i * i == num)
{
return i;
}
}
// cout << trading << endl;
dividend = num - (i - 1) * (i - 1);
// cout << dividend << endl;
divisor = trading * 20;
// cout << divisor << endl; //40
for (int j = 0; j < max; j++)
{
int k = 0;
for (k = 0; k <= 9; k++)
{
if ((divisor + k) * k >= dividend * 100)
{
break;
}
}
// cout << "k" << k << endl;
dividend *= 100; // 除的数字 300 上边的数字
down = (divisor + (k - 1)) * (k - 1);
dividend = dividend - down;
// cout << "下边" << dividend << endl;
// cout << "下" << xia << endl;
// cout << dividend << endl;
trading = trading * 10 + (k - 1); // 最上边的最后的得数
// cout << trading << endl;
// cout << j << endl;
divisor = trading * 20; // 左边的数
d++;
}
while ((d - 1) > 0)
{
trading /= 10.0;
d--;
}
return trading;
// cout << " " << divisor;
}
12-18
1万+
