笔试题之sqrt函数重写 之续
个人信息:就读于燕大本科软件工程专业 目前大三;
本人博客:google搜索“cqs_2012”即可;
个人爱好:酷爱数据结构和算法,希望将来搞科研为人民作出自己的贡献;
博客内容:笔试题之sqrt函数重写;
博客时间:2014-4-1
编程语言:C++
编程坏境:Windows
编程工具:vs2008
-
引言
超越永无止境-----衡水二中
致我的高中母校 ---- 衡水二中
致我的高三语文老师 ---- 赵建业
致我的高一高二化学老师 --- 郭建文
致我的高一高二数学老师 --- 庞艳香
致我的高二班主任即年级主任 --- 高红蕾
致我的高三班主任 --- 高明静
致我的高一班主任 --- 王丽雅
谢谢一路相伴的老师们,你们每一位老师都有不同程度的影响,谢谢你们,陈青松永远记着你们。
-
题目
求一个正整数N的开方,不能用库函数sqrt,精度在0.001即可。
-
思路
思路共有两步,第一步的想法与上一篇博客中的想法不同,当然这个更快,第二步就完全相同了。
第一步是找出查找区间,上一篇博客是逐渐扩大,然后找到,时间是现行的,那么可不可以变成常量的,答案是肯定的,
我们得到参数以后可以知道它的长度,根据它的长度,我们就可以在O(1)时间内,找出一个范围。
如果参数的长度是 偶数 m
那么 区间为 ( 10^(m/2 -1) ,10^(m/2) )
否则
区间为 ( 10^(m/2) , 10^(m/2)+1 )
区间确定后,便继续上一篇介绍的第二步完成算法即可。
举个例子 N = 3646132,长度是 7
那么 区间为 (10^3 , 10^4) 因为 10^6 <= N <= 10^8
如果 N = 6465
那么 区间为 (10^1 , 10^2) 因为 10^2 <= N <= 10^4
实验
解释程序 :
第一行输入的是 N
第二行输入的是 小数的位数(如果输入的小于0 ,将异常抛出,重置为0 )
第三行输出的是 结果
代码
mine_string.h
#include <iostream> #include <string> #include <limits> using namespace std; // extra the class of string class String:public string { public: // function 1: mode the add of int( (-3) + (-3) ) = - 6 // input: 两个字符串 a 和 b,里面放的都是整数; // output: 返回一个字符串,字符串里面是整数; // 功能: 实现参数两个整数的相加操作,结果存在返回的字符串里 static string ADD_Int(string a,string b); // function 2: make a-b mode int a - b; 7 - (-3) = 10 // input: 两个字符串 a 和 b,里面放的都是整数; // output: 返回一个字符串,字符串里面是整数; // 功能: 实现参数两个整数的相减操作,结果存在返回的字符串里 static string MINUS_Int(string a,string b); // function 3: make a*b mode int a * b; // input: 两个字符串 a 和 b,里面放的都是整数; // output: 返回一个字符串,字符串里面是整数; // 功能: 实现参数两个整数的相乘操作,结果存在返回的字符串里 static string MULT_Int(string a,string b); // function 4: mode the division a/b // input: 两个字符串 a 和 b,里面放的都是整数; // output: 返回一个字符串,字符串里面是整数; // 功能: 实现参数两个整数的相除操作,结果存在返回的字符串里 static string DIV_Int(string a,string b); // function 5: pow number a^b // input: 两个字符串 a 和 b,里面放的都是整数; // output: 返回一个字符串,字符串里面是整数; // 功能: 实现参数两个整数的a^b操作,结果存在返回的字符串里 static string Pow_Int(string a,string b); // function 6: int To string :"123" = 123 // input: 一个int数 a; // output: 返回一个字符串,字符串里面是整数; // 功能: 将整数a转换成对应的字符串格式 static string Int_To_String(int x); // function 7: static char division a/b : 4 / 3 static string Division(string a,string b); // function 8: make a-b mode int a - b; 4 - 3 static string MinusInt(string a,string