python长整数相乘_python写的大整数相乘的方法

输入

72106547548473106236 982161082972751393 两个大整数

输出结果

70820244829634538040848656466105986748

解题思路

首先根据 大整数相乘的原理的基础上,把大整数进行优化拆分,拆分的长度,要考虑语言中整形的长度。这里用的python,其实可以直接乘的,呵呵。

我暂定设为了 4,也就是 说

7210 6547 5484 7310 6236

98 2161 0829 7275 1393

然后 逐份相乘,当然千万别忘了结果要补零。 例如 当 7310 * 7275 结果一定要补上8个零。

最后 将每一步的结果直接相加就可以了。

里面写了一个函数 xiangjia,就是用于大整数相加的。没做优化,其实也是可以每隔几位 ,分割开的。

# hh=input()

hh=‘72106547548473106236 982161082972751393‘

zonglen=len(hh)-1

a=hh.split()

tiqu=4 #提取位数,大小取决于内存中 int型位数,我这里随便写的。因为python,其实没有限制。

#大整数相加的函数,没做优化 没做分割

def xiangjia(a1,b1):

lista=list(a1[::-1]) #翻转

listb=list(b1[::-1])

list_resu=[]

yu9=0

resu9=0

for x in range(max(len(a1),len(b1))): #取最长的数,循环

if x

ax_temp=int(lista[x])

else:

ax_temp=0 #千万别超出索引范围

if x

bx_temp=int(listb[x])

else:

bx_temp=0

resu9=(ax_temp+bx_temp+yu9)%10 #进位

yu9=(ax_temp+bx_temp+yu9)//10 #余数

list_resu.append(resu9)

if yu9>0:

list_resu.append(yu9) #循环完了后,如果还有余数,继续添加

#转化成正常序列

resu8=‘‘

for x in list_resu[::-1]:

resu8+=str(x)

return resu8

#创建空list_sum

result0=‘‘

#开始遍历

#取长度

a0_len=len(a[0])

a1_len=len(a[1])

#取除结果

chu0=a0_len//tiqu

chu1=a1_len//tiqu

#取余

yu0=a0_len%tiqu

yu1=a1_len%tiqu

x=0

y=0

while chu1-y>=0:

x=0

while chu0-x>=0:

if chu0-x>0:

cheng0=int(a[0][-(1+x*tiqu):-(tiqu+1+x*tiqu):-1][::-1])

else:

if yu0>0:

cheng0=int(a[0][0:yu0])

else:

break

if chu1-y>0:

cheng1=int(a[1][-(1+y*tiqu):-(tiqu+1+y*tiqu):-1][::-1])

else:

if yu1>0:

cheng1=int(a[1][0:yu1])

else:

break

temp_resu=str(cheng0*cheng1)+‘0‘*x*tiqu+‘0‘*y*tiqu

result0=xiangjia(result0,temp_resu)

x+=1

y+=1

print(result0)

这是优化前的一版,完全按照手工计算的竖式方式编的,仅供参考。

hh=input()

zonglen=len(hh)-1

a=hh.split()

#创建空list_sum

list_sum=[]

for x in range(zonglen-1):

list_sum.append(0)

p=0 #空位

for x in a[1][::-1]: #遍历第二个大数 翻转遍历

list0=[]

for y in a[0][::-1]: #遍历第一个大数 翻转遍历

list0.insert(0,int(x)*int(y))

#移位相加

n=len(list0)

for g in range(n):

list_sum[zonglen-1-g-1-p]+=list0[n-g-1]

p+=1

#求和

m=0 #进位数

n=len(list_sum)

for z in range(n): #进位

list_sum[n-z-1]+=m

m=0

if list_sum[n-z-1]>=10:

m=list_sum[n-z-1]//10

list_sum[n-z-1]=list_sum[n-z-1]%10

if m>0: #高位补数 进位

list_sum.insert(0,m)

#转字符串输出

result=‘‘

for x in list_sum:

result+=str(x)

print(result)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/329681.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java Web应用的代码分层最佳实践

转载自 Java Web应用的代码分层最佳实践代码分层,对于任何一个Java Web开发来说应该都不陌生。一个好的层次划分不仅可以能使代码结构更加清楚,还可以使项目分工更加明确,可读性大大提升,更加有利于后期的维护和升级。从另外一个角…

中断屏蔽技术

【README】 本文总结自bilibili《计算机组成原理(哈工大刘宏伟)》的视频讲解,非常棒,墙裂推荐; 【1】中断屏蔽 1,中断屏蔽的意思是,在中断1的服务程序执行过程中,不允许被其他中断…

.NET FM的未来计划

2016年3月21日,我们启动了.NET FM这档独立播客来服务中文.NET和微软技术社区。如同早先感谢信所言,能够得到社区的肯定和全力支持,二位主播是受宠若惊。关于未来的计划,下面简单和大家分享一下。 首先,关于节目播出频率…

Java开发必须掌握的日志分析命令

转载自 Java开发必须掌握的日志分析命令 对于大型网站来说,很多网站在可用性方面提出4个9或者5个9的要求,如果是4个9,那么网站全年的不可用时间不能超过52.6分钟,如果是5个9,全年不可用时间不能超过5.2分钟。这其实是很…

指令寻址方式与数据寻址方式

【README】 1.本文总结自bilibili《计算机组成原理(哈工大刘宏伟)》的视频讲解,非常棒,墙裂推荐; 2. cpu访存寄存器耗费 10ns,访问缓存(高速缓冲寄存器)耗费20ns,访问主…

python oj 输入_Python写OJ题时输入问题

# encoding: utf-8Created on Nov 6th, 2014author: SpeedcellPython的输入是野生字符串,所以要自己转类型strip去掉左右两端的空白符,返回strslipt把字符串按空白符拆开,返回[str]map把list里面的值映射到指定类型,返回[type]EOF…

本地缓存的原理及技术选型参考

转载自 本地缓存的原理及技术选型参考互联网架构设计的五大要素:高性能、高可用、可伸缩性、可扩展性、安全。如何做到高性能、高可用,缓存是一大助力。我们知道,绝大部分的时候,读数据写数据符合二八定律。并且读数据中&#xff…

程序员欢呼:微软Bing开始支持搜索源码、可直接运行

日常生活中,程序员们经常会遇见这样那样的问题,比如忘记了代码该怎么写,又或者需要实现一些特殊的算法和功能。这时候,你就可以去找微软 Bing 帮忙啦! 微软最近联合 HackerRank 一起研发了一项新功能:源代码…

rabbitmq创建缓存连接工厂

转自: 【RabbitMQ-3】连接池的配置_小胖学编程的博客-CSDN博客文章目录1. rabbitmq的connection连接池1.1 问题提出1.1.1 Connection对象管理以及性能1.1.2 Channel对象管理以及性能1.2 Spring AMQP线程池配置1.2.1 ConnectionFactory连接工厂1.2.2 消费发送和接收…

python简短语法_写出优雅简洁的 python 语法(二)函数传参

Python中函数传递参数的形式包含多种,可根据情况而定使用哪种方式。基本所有语言都有简介明了的语法去替代繁琐的代码,优雅的写法不仅能提升代码美观,更能提高提高开发效率,让代码更加易读。位置传递,默认参数位置传参…

你真的了解Java中的三目运算符吗

转载自 你真的了解Java中的三目运算符吗三目运算符是我们经常在代码中使用的,a (bnull?0:1);这样一行代码可以代替一个if-else,可以使代码变得清爽易读。但是,三目运算符也是有一定的语言规范的。在运用不恰当的时候会导致意想不到的问题。本文就介绍一…

关于.NET下开源及商业图像处理(PSD)组件

1 前言 这篇博客的背景是:为了完成吉日嘎拉的“PSD文件损坏检测和图层检测”任务,查找了目前.NET各种开源的及商业的图像处理资料,在完成任务之后,进行总结。此次任务主要是用C#操作PSD(PhotoShop)文件,中文资料很少&a…

SpringBoot连接多RabbitMQ源

转自: SpringBoot连接多RabbitMQ源 - 掘金在实际开发中,很多场景需要异步处理,这时就需要用到RabbitMQ,而且随着场景的增多程序可能需要连接多个RabbitMQ。SpringBoot本身提供了默认的配置可以快速配置连接RabbitMQ,但…

满足其中一个条件则可_农村分户好处多,但并非人人都可分户!满足这4个条件才可以申请...

分户,一般指子女成年或者成家后从父母户口里面独立出去,自立一户;也可以是指夫妻离婚后一方将户口独立出去(离婚也可以不分户,变更婚姻状态就行)。简单的说分户是指原本在一个户口本上的人口,现在分出去自成一个户口本…

Synchronized的实现原理(一)

转载自 Synchronized的实现原理(一)synchronized,是Java中用于解决并发情况下数据同步访问的一个很重要的关键字。当我们想要保证一个共享资源在同一时间只会被一个线程访问到时,我们可以在代码中使用synchronized关键字对类或者对…

FOSS历史回顾:三代开源人的故事

现在是2016年,你环顾一下四周,开源早已无处不在了。开源无论是规范、形式、以及面貌都和最初的大相径庭,然而事实上,这也预示着新一代的开源程序员们的崛起。下面我们尝试解释下。 (以下这一段落为作者自谦&#xff09…

Spring中@Autowired、@Qualifier、@Resource的区别

转自: Spring中Autowired、Qualifier、Resource的区别_老周聊架构的博客-CSDN博客_qualifier和resource区别1、AutowiredAutowired 可以单独使用。如果单独使用,它将按类型装配。因此,如果在容器中声明了多个相同类型的bean,则会…

map分组后取前10个_海关数据 | 图解前10个月外贸

*内容转载自微信公众号:海关发布RECOMMEND【 推荐阅读 】海关数据 | 图解前三季度我国外贸海关数据 | 图解8月外贸海关数据 | 一图看懂前7个月外贸海关数据 | 图解上半年度外贸增3.9%声明本微信订阅号不以商业营利为目的,不排除部分文字内容或图片转载自…

回顾build 2016:你好,这是微软迄今最好的Windows开发平台

按:本文作者陈计节,ThoughtWorks 高级咨询师。多年的跨平台 .NET 开发者,全栈工程师,技术布道师。擅长互联网应用程序的设计、开发和运维等工作。 在最近的开发者大会(Build 2016)上,微软面向开…

深入理解多线程(二)—— Java的对象模型

转载自 深入理解多线程(二)—— Java的对象模型上一篇文章中简单介绍过synchronized关键字的方式,其中,同步代码块使用monitorenter和monitorexit两个指令实现,同步方法使用ACC_SYNCHRONIZED标记符实现。后面几篇文章会…