首页 > 编程语言 > 基于python 的 分治算法 解决 大数乘法问题 -- 浅浅记录

基于python 的 分治算法 解决 大数乘法问题 -- 浅浅记录

时间:2023-02-22 21:58:26浏览次数:37  
标签:return 大数 python zero len -- add b1 chengfa

分治方法 总的来说 还是递归的调用,将大的问题分解为小的问题

 1 #通过分治 计算 n个0的字符串
 2 def zero(n):
 3     if n==0:
 4         return ""
 5     if n==1:
 6         return "0"
 7     return zero(n//2)+zero(n//2)+zero(n%2)
 8 
 9 #计算大数加法
10 def  add(a,b):
11     if len(a)<=8 and len(b)<=8:
12         return str( int(a)+int(b) )
13     a1="0"
14     a2=a
15     if len(a)>8:
16         a1=a[0:len(a)-8]
17         a2=a[len(a)-8:]
18                                          
19     b1="0"
20     b2=b
21     if len(b)>8:
22         b1=b[0:len(b)-8]
23         b2=b[len(b)-8:]
24 
25     k=add(a2,b2)
26     while(len(k)<8):
27         k="0"+k
28     if len(k)>8:
29         return add( add(a1,b1),"1")+k[1:]
30     return add(a1,b1)+k
31 
32 def chengfa(a,b):
33     if len(a)<=4 and len(b)<=4:
34         return str( int(a)*int(b) )
35     if len(a)>4:
36         k=len(a)//2  #分治的中间值
37         #通过计算超过长度4 下分解
38         return  add( chengfa(a[0:k],b)+zero(len(a[k:] )),chengfa(a[k:],b) )
39     return chengfa(b,a)
40 print(chengfa("999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999","999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999"))

运行结果;

== RESTART: C:\Users\Administrator\AppData\Local\Programs\Python\Python38\w.py =
999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999998000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001

 

标签:return,大数,python,zero,len,--,add,b1,chengfa
From: https://www.cnblogs.com/xiacan/p/17146082.html

相关文章

  • Git 不识别文件名字母大小写变化
    解决方案为了解决上述这个问题,可以终端运行以下命令:gitmvdockerfileDockerfile如果一次重命名了很多文件呢只有一个文件名大小写变化的这种场景,已经知道怎么应对......
  • Linux 应用内存信息分析 VSS/RSS/PSS/USS【转】
    转自:在分析Linux内存使用时,不仅需要分析kernel内存使用情况,还需要分析Linux应用的内存使用情况,这就引出了VSS/RSS/PSS/USSRSS/PSS可以通过cat/proc/PID/smaps节点查看。1......
  • 浅谈测试用例设计
    前言最近干的最多的事情就是设计测试用例、评审测试用例了,于是我不禁又想到了一个经典的问题:如何设计出优秀的测试用例?可能有些童鞋看到这个问题会有些不以为然,这有什么......
  • Linux相关的面试题
    1、说一下你比较常用的命令答:目录以及文件相关的有:cd  切换目录ls  显示目录下的文件  -a显示包括隐藏文件的所有文件  -l显示文件详细信息  -ltr以......
  • 支持女权就是支持良知
    我很少参与思想、男女权益的讨论,因为很多人的思维还停留在大清。谈之无益,又增加无聊的口舌之争。但是最近粉色头发的女孩被网暴致死,让我想多说一些话。我从来不麻木,遇到不......
  • 文件上传功能
              ......
  • python小技巧
    [从python包镜像库安装库]pipinstall-ihttps://pypi.tuna.tsinghua.edu.cn/simplePyQt5[下载离线安装包]pipdownloadpyqt5-ihttps://pypi.tuna.tsinghua.edu.cn......
  • 学数据结构第一个是学链表?不,是它
    大家好,我是五月。前言以前很多小白都来询问过关于数据结构的内容,问题基本都是想学链表,堆栈、队列、树这些该怎么下手。 一方面我表示赞许,另一方面又觉得他们对数......
  • 3
    [NOIP2002提高组]均分纸牌思路考虑第一堆牌只能与第二堆传递,那么可以直接令其变为平均值。然后发现第二堆牌变成了第一堆,一直继续即可。#include<bits/stdc++.h>usin......
  • 关键字补充
    const修饰变量为只读register修饰寄存器变量如果变量被高频繁的使用,会自动将变量存储在寄存器中。目的:提高访问效率如果想将变量直接放入寄存器中,可......