水一水博客,向往更好的未来。
再很多编程的题里。。。。
有一些可恶的出题人,他们把测试点出的很大很大,more and more bigeeeeeeeeee......st
为了得到好看的成绩和不歇菜,我们不得不用编程的方式来打开小学的竖式。。。
加法
(万数由加而生)
由于列表(数组)的读取是从左往右的,跟加法的从右往左刚好相反了,so,反转一下就行了。
a=input().strip()
b=input().strip()
#要相加的数
n=len(a)
m=len(b)
#找长度
anum=[int(i) for i in a]
bnum=[int(i) for i in b]
#变成[1,2,3]
anum.reverse()
bnum.reverse()
#变成[3,2,1]反转
if n>m:
for i in range(n-m):
bnum.append(0)
else:
for i in range(m-n):
anum.append(0)
#把[1,2,3],[4,5]变成[1,2,3],[0,4,5]防止错位
data=[0 for i in range(max(n,m)+1)]
#输出列表
for i in range(max(n,m)):
data[i + 1] = (anum[i] + bnum[i] + data[i]) // 10
#进位
data[i]=(anum[i]+bnum[i]+data[i])%10
#剩下的留下
data.reverse()
#反转回来
start=max(n,m)
for i in range(max(n,m)):
if data[i]!=0:
start=i
break
for i in range(start,max(n,m)+1):
print(data[i],end="")
#去剩下的零,输出
减法
(有加必有减)
a=input().strip()
b=input().strip()
#输入
final=''
if int(a)<int(b):
a,b=b,a
final+='-'
#负数?
n=len(a)
m=len(b)
#长度
anum=[int(i) for i in a]
bnum=[int(i) for i in b]
anum.reverse()
bnum.reverse()
if n>m:
for i in range(n-m):
bnum.append(0)
else:
for i in range(m-n):
anum.append(0)
#(看加法)
ans=[0 for i in range(max(n,m))]
#变成ans了
for i in range(max(n,m)):
ans[i]=anum[i]-bnum[i]
#先减出来
for i in range(max(n,m)-1):
if ans[i]<0:
ans[i]+=10
ans[i+1]-=1
#延时借位
ans.reverse()
#反转回来
num=''
for i in ans:
num+=str(i)
num=num.lstrip('0')
if a==b:
print(0)
else:
print(final+num)
#去除零,输出
乘法
(便利的加法)
a=input().strip()
b=input().strip()
n=len(a)
m=len(b)
anum=[int(i) for i in a]
bnum=[int(i) for i in b]
anum.reverse()
bnum.reverse()
ans=[0 for i in range(n+m)]
#看减法
for i in range(m):
for j in range(n):
ans[i+j]+=bnum[i]*anum[j]
#乘一下
for i in range(n+m-1):
ans[i+1]+=ans[i]//10
ans[i]=ans[i]%10
#延迟进位
ans.reverse()
#反转
start=n+m-1
for i in range(n+m):
if ans[i]!=0:
start=i
break
for i in range(start,n+m):
print(ans[i],end="")
#去零,输出
除法
(有乘必有除)
终于,终于,不用反转啦!
n1=input().strip()
n2=int(input().strip())
#输入
l=len(n1)
#弄长度
last=0
#剩余
ans=[0 for i in range(l)]
#一如既往
for i in range(l):
last=last*10
last+=int(n1[i])
#除的内容
ans[i]=last//n2
last=last%n2
#除一下
idx=0
while idx<l-1 and ans[idx]==0:
idx+=1
for i in range(idx,l):
print(ans[i],end='')
#去零,输出
求过!