首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

大整数加法

832. 统计负数

给一个横向排序的且纵向也排序的的的矩阵, 问里面有几个负数

注意事项

输入的矩阵大小为,,。

为了约束程序的时间复杂度,你的程序将会运行次

样例

Given mat =

return.

第一列计数,寻找小于0的数,

count =

depth =len(nums)

width =len(nums[])

foriinrange(depth):

ifnums[i][]

如果某行第一个数小于0,则在该行统计小于0的数的个数。

forjinrange(width):

ifnums[i][j]

count+=1

运行结果:

代码:

729. 阶乘除法的最后一位数

给出两个数和, 其中. 我们需要计算结果 F 的最后一位数是什么, 其中F =(1

样例

只看最低位,如果A与B相差大于等于10,则B*(B-1)*(B-2)*...*(A+2)*(A+1)*A,中间必定有1个数尾数为0,计算结果F的尾数必为0,无论之后再乘什么都不会变化。

标记最低位factor初始值为1,value初始值为B,B的最低位乘以factor,保留最低位为factor,遇到factor为0时退出,或者直至value为A+1结束。

factor=1

value = B

whilevalue> A:

factor=((value%10)*factor)%10

ifint(factor)==:

returnint(factor)

value-=1

returnint(factor)

运行结果:

代码:

655. 大整数加法

以字符串的形式给出两个非负整数和,返回和的和。

注意事项

num1 和 num2 的长度都小于5100。

num1 和 num2 都只包含数字 0-9。

num1 和 num2 都不包含任何前导零。

您不能使用任何内置的BigInteger库内的方法或直接将输入转换为整数。

样例

给定 num1 =,num2 =

返回

思路跟昨天做的加1一致,判断每一位相加是否有进位。

结果字符串,取num1和num2长度,将2个数字转化为列表。

resultstr = []

numlist1 =list(num1)

numlist2 =list(num2)

length1 =len(numlist1)

length2 =len(numlist2)

判断哪个数长度较小(如果相同则无所谓了):

iflength1 > length2:

minlength = length2

else:

minlength = length1

两个数的列表都是最高位在前,将列表倒序,从最低位开始加,方便操作,进位先设置为0:

numlist1.reverse()

numlist2.reverse()

promotion =

对于两数中较短一个,先计算minlength长度的和:

如果某一位两数该位+进位之和小于10,则结果字符串加三数之和的字符,进位设置为0;

如果某一位三个元素之和大于9,则存在进位,结果字符串加三数之和对10求余的结果转字符,进位设置为1。

foriinrange(,minlength):

ifint(numlist1[i]) +int(numlist2[i]) + promotion

resultstr.append(str(int(numlist1[i]) +int(numlist2[i]) + promotion))

promotion =

elifint(numlist1[i]) +int(numlist2[i]) + promotion >9:

resultstr.append(str((int(numlist1[i]) +int(numlist2[i]) + promotion) %10))

promotion =1

如果length1>length2,对于length2+1到length1长度的num1,计算就回到了之前的加1,promotion沿用上面的结果,

如果数字小于9、进位为1,设置进位为0,结果添加数字+1转字符,

如果进位为0,结果添加原数字字符,进位还是0,不变,

如果数字为9,进位为1,结果添加0,进位还是1,不变。

iflength1 > length2:

foriinrange(minlength,length1):

ifint(numlist1[i])

promotion =

resultstr.append(str(int(numlist1[i]) +1))

elifpromotion ==:

resultstr.append(numlist1[i])

elifint(numlist1[i]) ==9andpromotion ==1:

resultstr.append('0')

如果最终进位为1,结果再加一个1。

ifpromotion ==1:

resultstr.append('1')

计算结束,将结果倒序,高位在前低位在后,将结果转化为字符串。

resultstr.reverse()

result ="".join(resultstr)

运行结果:

代码:

本来是想看看阶乘这个题的,结果还要先实现了大整数加法,明天继续看大整数乘法,想了想,大整数乘法跟阶乘应该是同样的题目。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180304G0QTR400?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券