题目名称:非负整数求和
时间限制:1000ms内存限制:256M
题目描述
给定两个字符串形式的非负整数 num1 和 num2 ,计算它们的和。
注意:
num1 和 num2 的长度都小于 5100.
num1 和 num2 都只包含数字 0-9. - num1 和 num2 都不包含任何前导零。
你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式。
输入描述:
输入整数num1,num2。(0<=num1,num2<=1e100)
输出描述:
输出整数num1,num2的加和。
示例
示例1
输入234 222复制
输出456复制
提示
无
解题思路
1、判断输入字符是否符合题意及0值处理:
1)、#num1 和 num2 的长度都小于 5100.
if len(num1) <5100 and len(num2)<5100 :
2)、#num1 和 num2 都只包含数字 0-9. - num1 和 num2 都不包含任何前导零。
if isinstance (int(num1),int) and isinstance (int(num2),int) and int(num1[0])!=0 and int(num2[0])!=0 :
3)、特殊情况:当其中一个数字为0时,直接输出另外一个数字
#如果其中任意1个为0,则加和结果为另外一个数字
if int(num1)==0 :
return num2
if int(num2)==0 :
return num1
2、按位加和及进位:
代码参考:
每日一练 - Python 非负整数求和的另一种方法_码0_72347309的博客-CSDN博客
实现代码及思路分析:
class Solution:
def __init__(self) -> None:
pass
def solution(self,strs):
#list中的2个字串分别传给num1,num2
#这里需要的输入是str,lens函数如果的输入值如果为int,会出现错误,如:
# len(152)
#TypeError: object of type 'int' has no len()
#本例中,输入阶段已经直接转换为str
num1, num2 = strs
#如果其中任意1个为0,则加和结果为另外一个数字
if int(num1)==0 :
return num2
if int(num2)==0 :
return num1
#num1 和 num2 的长度都小于 5100.
if len(num1) <5100 and len(num2)<5100 :
#num1 和 num2 都只包含数字 0-9. - num1 和 num2 都不包含任何前导零。
if isinstance (int(num1),int) and isinstance (int(num2),int) and int(num1[0])!=0 and int(num2[0])!=0 :
# 保证num2的长度不大于num1的长度,便于后期计算
if len(num1) < len(num2):
num1, num2 = num2, num1
#对齐数位,num2 的开头用0填充,使num2的长度等于num1的长度
num2 = num2.zfill(len(num1))
result = ""
add = 0
#从最低位开始往高位循环,num1[-1],num1[-2],...,num1[-len(num2)-1]
for i in range(-1, -len(num2) - 1, -1):
a1, a2 = int(num1[i]), int(num2[i])
#按位加和的结果
s = a1 + a2 + add
#十进制,取余数转换为字符,和上一步的的字符拼接
result = str(s % 10) + result
add = s // 10 # 下一位的进位:0或1(有进位)
if add > 0:
result = str(add) + result # 最后一位的计算结果如果有进位,需加上1
return result
if __name__ == "__main__":
#strs = [str(item) for item in input('please inupt two nums separated by space:').strip().split()]
#这里需要的输入是str,故输入值强制转换为str
strs = [str(item) for item in input().strip().split()]
#输入接收也可用map函数,如(python3需要用list函数展开):
#strs=list(map(str,input().strip().split()))
sol = Solution()
result = sol.solution(strs)
print(result)
PS1: Python zfill()方法
引自:https://www.runoob.com/python/att-string-zfill.html
描述
Python zfill() 方法返回指定长度的字符串,原字符串右对齐,前面填充0。
语法
zfill()方法语法:
str.zfill(width)
参数
- width -- 指定字符串的长度。原字符串右对齐,前面填充0。
返回值
返回指定长度的字符串。
实例
以下实例展示了 zfill()函数的使用方法:
#!/usr/bin/python
str = "this is string example....wow!!!";
print str.zfill(40);
print str.zfill(50);
以上实例输出结果如下:
00000000this is string example....wow!!!
000000000000000000this is string example....wow!!!
PS2: 判断一个对象数据类型
(1)要判断一个对象或者是一个值的数据类型是否为指定类型的话就可以使用isinstance()函数,但是这个函数只能够用来判断对象是否为已知类型,也就是python的基础类型。如果对象的数据类型是pandas库的DataFrame或者是xlrt库的worksheet的话就是无法去判断的,因为python内没有对它们的支持,示例如下:
a = 2
isinstance (a,int)
True
isinstance (a,str)
False
# 还可以去判断是否属于一个序列中的某种数据类型
isinstance (a,(str,int,list))
True
(2)查看一个对象数据类型话就要使用type()函数,这个函数的作用就是根据传进去的对象或者是值返回对象的数据类型。同样它也只能够返回已知的数据类型,如果是使用库或者模块所构造出来的数据类型的话是无法去返回类型的,代码示例如下:
# 声明变量对象
str1 = ’asd123’
# 查看对象数据类型
type(str1)
str
type(123)
int