|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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)
复制代码
|
|