马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
描述
给定一个整数,请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零(参见样例2)。
输入
输入共 1 行,一个整数N。
-1,000,000,000 ≤ N≤ 1,000,000,000。
输出
输出共 1 行,一个整数,表示反转后的新数。
样例输入
样例 #1:
123
样例 #2:
-380
样例输出
样例 #1:
321
样例 #2:
-83
我的代码n = input()
m = len(n) #长度3
#判断是否为负数,是就先输出-
if int(n) < 0:
m -= 1
print('-',end='')
#循环M次,如第一次为0则跳过,每次循环m -1
#循环取值下标为k,k为-1,如果k=-1并且n[k] =0则判断尾数
#循环取值,得到-输出-,得到0并且未曾输出过其他非0数,则f还是0,不作输出,但m k运算
k = -1
f = 0 #是否已经取得第一个非0数
while m:
if n[k] == '-':
print('-',end='')
m -= 1
k -= 1
elif int(n[k]) == 0 and f == 0: #下标-1为0
m -= 1
k -= 1
else:
print(n[k],end='')
m -= 1
k -= 1
f = 1
代码通过验证没问题,但我觉得又长又臭,总觉得判断负数和尾数为0的时候效率极其低下
请高手们指点一下其他思路,我再想第二个版本的代码
知识点只到 for while if
本帖最后由 jackz007 于 2022-9-19 15:22 编辑
看来是我记的有偏差,那就更简单了 e , d , k = int(input('输入一个数:')) , 0 , 1
if e < 0:
e , k = -e , -k
while e:
d = d * 10 + e % 10
e //= 10
print(k * d)
|