sqrt函数重写加扩张
个人信息:就读于燕大本科软件工程专业 目前大三;
本人博客:google搜索“cqs_2012”即可;
个人爱好:酷爱数据结构和算法,希望将来搞科研为人民作出自己的贡献;
博客内容:笔试题之sqrt函数重写;
博客时间:2014-4-1
编程语言:C++
编程坏境:Windows
编程工具:vs2008
- 引言
课很多,还得准备笔试面试的东西,只能说这样一句话了
很多事情需要你硬着头皮去做,提前准备总不会错。提升自己的执行力是至关重要的!
- 题目
求一个正整数N的开方,不能用库函数sqrt,精度在0.001即可。
- 思路
首先我分析题目,分以下情况
1: N == x^2
2: N != x^2
对于第一种情况,我们怎么做?给一个N,然后找出某个整数x 使得 x^2 == N,不能用库sqrt函数,那就用暴力法?显然不行,那怎么办?
我们可以找出一个范围 使得 s<x<b; 然后 s^2 <= N and b^2 >= N,如果能找出这样一个范围就可以用折半查找了。
那么怎么去找出这么一个范围呢?这个就很简单了,很随意的,我的范围是这样查找的
(1,2) -> (2,4) -> (4,16) -> (16,16^2) -> (16^4,16^8) -> ·······
相信你一看出规律了吧,是吧。(这种方法我已经实现了,当然还有更好的想法,下篇博客给出,敬请期待)
对于第二种情况,我们先可以找出 结果的整数部分,然后再求小数部分
整数部分按照情况一的方法就可以了,至于小数部分,每精确一位小数,其实就是在末尾加上一位0·9中的数字而已,是不是,这里也用到折半查找,嘿嘿
还有我附加一句,我的程序已处理的数据能力已经超出了int的表示范围,采用自己编写的string的继承类实现而成;
- 实验
解释程序 :
第一行输入的是 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 b); // function 9: mode the add of int :3 + 4 static string AddInt(string a,string b); // function 10: make char to the int number :'9' = 9 static int CharToNumber(char c); // function 11: make int to the model char : 7 = '7' static string IntToChar(int i); // function 12: check whether the string is legal static bool Check_all_number(string a); // function 13: compare string a and b // input: