1,介绍

开平方有好几种方法,本文无意调研这个事情。只是初中有个老师曾经用粉笔,教给我们手撕任意数开平方的方法,自己回忆起来整理用python实现一下。

2,code

时间复杂度:log(n),其中n是开平方结果的小数点位数。

#! /usr/bin/env python
# -*- coding: utf-8 -*-
# 开平方
import timeclass NumberNode(object):def __init__(self, num):self.num = numself.square_result = 0self.current_target_number = 0self.square_result_str = ''self.finished = False@propertydef data_list(self):"""对num从低位向高位,每两位划分在一起,对num拆分成数组。这么拆分的原因是,每次求根号的下一位,最大不会超过一百,所以向下获取两位用来求的开平方的下一位"""number = self.numdivisor = 100_data_list = []while number:remainder = number % divisor_data_list.append(remainder)number = number / divisorreturn _data_list@propertydef data_list_len(self):return len(self.data_list)def get_target_number(self, index):if index < self.data_list_len:return self.data_list[self.data_list_len-1-index]return 0def get_reducer(self, index_ret):return (self.square_result * 10 * 2 + index_ret) * index_retdef reload_result(self, index_ret):self.square_result = self.square_result * 10 + index_retret_str_list = list(str(self.square_result))ret_str_list.insert(self.data_list_len, '.')self.square_result_str = ''.join(ret_str_list)def reload_current_target_number(self, index, index_ret):minute_ret = self.current_target_number - self.get_reducer(index_ret)self.current_target_number = minute_ret * 100 + self.get_target_number(index)if not self.current_target_number and index == self.data_list_len:self.finished = Truedef get_index_ret(self):for i in range(9, -1, -1):if self.get_reducer(i) <= self.current_target_number:return ireturn 0def square(self):"""计算开平方结果,主要理论依据是:(a.b)**2 == (a+0.b)**2 = a**2 + (0.b)**2 + 2*a*(0.b)"""index = 0index_ret = 0self.reload_current_target_number(index, index_ret)self.reload_result(index_ret)while not self.finished:index_ret = self.get_index_ret()index += 1self.reload_current_target_number(index, index_ret)self.reload_result(index_ret)print index_retprint self.square_result_strtime.sleep(0.1)print index_retprint self.square_result_strif __name__ == '__main__':number = int(input('number:'))num_node = NumberNode(number)num_node.square()

python 开任意数的平方相关推荐

  1. Python学习day13-函数进阶(1)

    Python学习day13-函数进阶(1) 闭包函数 闭包函数,从名字理解,闭即是关闭,也就是说把一个函数整个包起来.正规点说就是指函数内部的函数对外部作用域而非全局作用域的引用. 为函数传参的方式有 ...

  2. 小猿圈python之python期末考试测试题(二)_小猿圈Python开发面试题(二)

    原标题:小猿圈Python开发面试题(二) 小猿圈Python老师继上一次python面试题一,接着更新python面试题二,同学们测试一做的怎么样呢?有没有把握呢,想要看答案的同学们,可以在小猿圈上 ...

  3. 利用sentinel hub Python开发包查询和下载Sentinel-2等卫星遥感数据

    利用sentinel hub Python开发包查询和下载Sentinel-2等卫星遥感数据 1. 描述   sentinelhub Python包支持用户利用两种方式进行卫星遥感数据的下载和处理.第 ...

  4. python开发之Socket网络编程

    python开发之Socket网络编程 一.SOCKET基础 二.SOCKET通信流程 1. 流程描述: 2. 相关方法及参数介绍: 三.实例(屌丝追女神的故事) 1. 故事1:(一次通信) 2. 故 ...

  5. python自守数_自守数-随心随性无为而为-51CTO博客

    问题描述: 如果某个数的平方的末尾几位等于这个数,那么就称这个数为自守数.显然,5和6是一位自守数(5*5=25,6*6=36). 25*25=625,76*76=5776,所以25和76是两位自守数 ...

  6. Python识别验证码----数美图标点选

    Python识别验证码----数美图标点选 写在前面 数据特点 获取数据 识别思路 按顺序抠出F4 定位f4 计算相似度 打标签(~~偷懒~~ ) 训练孪生网络 使用模型 识别结果 改进点 写在前面 ...

  7. 学习Python开发难不难?

    Python编程语言近几年已然成为最热门的编程语言之一,Python编程语言被广泛引用语人工智能开发.数据科学.Web开发.自动化测试.自动化运维等领域.由于Python开发工程师的就业范围广泛.就业 ...

  8. Python开发之pandas行和列的获取

    Python开发之pandas行和列的获取 0 1. 行和列的获取 1.1 根据索引获取行 1.2 根据条件获取行 1.3 获取列 2 区域选取 2.1 df.loc[] 2.1.1 行选取 2.1. ...

  9. Python绘制任意正n边形

    目录 Python画任意正n边形 代码 效果 Python画任意正n边形 代码 # 绘制一个n边形 import turtle turtle.setup(650, 650) # 画布宽度650px,高 ...

  10. python开发之Django(二)

    python开发之Django(二) 一.ORM 1. ORM基础 2. Django ORM语法 2.1 表(模型)的创建: 2.2 表的操作 2.2.1 增删改查 2.2.2 对象查询,单表条件查 ...

最新文章

  1. 如何在linux服务器上使用hanlp
  2. sqlalchemy1.4风格2.0
  3. 服务器安装Windows Server + Ubuntu双系统
  4. 数据中心的“芯”竞争
  5. mysql中使用CONCAT 实现拼接
  6. 这篇Cell里面的GSEA展示很不错!
  7. linux ftp 操作命令
  8. mysql handbook_MySQL 8 Administrator’s Guide
  9. 【RGB检测】基于matlab GUI图像RGB检测【含Matlab源码 088期】
  10. Mybatis的简单介绍,什么是Mybatis框架
  11. 编程随想 关系图_邹军:玩转数控编程,这里有个大招分享给你
  12. Ubuntu firefox无法加载视频
  13. Swift游戏实战-跑酷熊猫(一) 简介 (含源代码)
  14. 摄影欣赏:30幅五光十色的精美秋天风景摄影作品
  15. 关于百度导航SDK没声音的一种解决办法
  16. python方差检验分析(ANOVA)
  17. 人脸识别技术介绍和表情识别最新研究
  18. IntellIdea 注册码
  19. Atlas:手淘Native容器化框架和思考
  20. 2022-2028年中国骑行手套行业市场研究分析及投资前景规划报告

热门文章

  1. 苹果系统自带的计算机怎么恢复出厂设置,苹果电脑MacBook如何将系统恢复出厂设置...
  2. sphinx linux,sphinx使用及其简单配置方法
  3. 大道至简(周爱民)第一章读后感-------伪代码
  4. 修改手机屏幕刷新率_手机屏幕刷新率真的越高越好吗?
  5. 华为鸿蒙跑了个“hello world”!跑通后,我特么开始怀疑人生....
  6. DyLight 649-LCA;DyLight 649标记小扁豆凝集素(LCA)
  7. Unity控制摄像机缓慢移动的代码(插值计算 非常丝滑)
  8. 计算机竞赛等级,美国计算机奥林匹克竞赛等级
  9. 程序员的人生——应届生北漂的第三天
  10. Java8新特性学习第一天