笔试题之sqrt函数重写 之续

这篇博客是关于手动实现正整数开方的笔试题,要求精度达到0.001,不能使用库函数sqrt。作者提出了一个改进的思路,通过参数长度快速确定查找区间,从而在O(1)时间内找到范围。文章介绍了如何根据参数长度确定区间,并给出了代码示例。
摘要由CSDN通过智能技术生成

笔试题之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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值