鱼C论坛

 找回密码
 立即注册
查看: 2088|回复: 16

[技术交流] Python:每日一题 228(答题有奖)

 关闭 [复制链接]
发表于 2019-8-25 09:00:28 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 zltzlt 于 2019-9-14 14:02 编辑

今天的题目:

给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转

这道题已结束,进入奖励阶段。

示例 1:

输入: 123
输出: 321
示例 2:

输入: -123
输出: -321
示例 3:

输入: 120
输出: 21

注意:

假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [-2**31, 2**31-1] 。请根据这个假设,如果反转后整数溢出那么就返回 0


我的解法:

  1. def reverse(num):
  2.     num = str(num)[::-1].strip("0")
  3.     if num.endswith("-"):
  4.         num = "-" + num.strip([:-1])
  5.     num = int(num)
  6.     if not -2 ** 31 <= num <= 2 ** 31:
  7.         return 0
  8.     return num
复制代码


大佬解法:

  1. class Solution(object):
  2.     def reverse(self, x):
  3.         """
  4.         :type x: int
  5.         :rtype: int
  6.         """

  7.         flag = 0
  8.         if x < 0:
  9.             flag = 1
  10.         if flag:
  11.             s = str(x)[1:]
  12.             s = s[::-1]
  13.             x = -1 *int(s)
  14.         else:
  15.             s = str(x)
  16.             s = s[::-1]
  17.             x = int(s)

  18.         if x < -1 * 2 **31 or x > 2** 31 -1:
  19.             return 0
  20.         return x
复制代码

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-8-25 09:27:24 | 显示全部楼层
抢答,然后出门健身去~~
  1. def answer(num):
  2.     if abs(num) > (2 ** 31):
  3.         return 0
  4.     if num >= 0:                  #正数
  5.         return int(''.join(list(str(num))[::-1]))
  6.     else:                         #负数
  7.         return int(''.join(list(str(-1*num))[::-1])) * (-1)

  8. print(answer(123))
  9. print(answer(-123))
  10. print(answer(120))
  11. print(answer(2**31+1))
  12. print(answer(-2**31-1))
  13. print(answer(0))
复制代码

评分

参与人数 1荣誉 +2 鱼币 +2 贡献 +1 收起 理由
zltzlt + 2 + 2 + 1

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-25 09:37:22 | 显示全部楼层
关于32位整数的限制其实是针对其他语言的……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-25 09:50:00 | 显示全部楼层
本帖最后由 永恒的蓝色梦想 于 2019-8-25 10:05 编辑
  1. def func(n):k=int('-'+str(n)[:0:-1])if n<0 else int(str(n)[::-1]);return k if 2**31>k>=-2**31 else 0
复制代码
乱写写

点评

不建议挤在一行写  发表于 2019-8-25 21:45

评分

参与人数 1荣誉 +1 鱼币 +1 贡献 +1 收起 理由
zltzlt + 1 + 1 + 1

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-25 10:46:50 From FishC Mobile | 显示全部楼层

#给出一个32位整数的反转数

a=int(input('请输入数据:'))
print('\n结果是:')

while a :
    print(a%10,end='')
    a=a//10
print('\n运行结束')

点评

假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [-2**31, 2**31-1] 。请根据这个假设,如果反转后整数溢出那么就返回 0。  发表于 2019-8-25 10:50
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-25 10:55:15 From FishC Mobile | 显示全部楼层
卧槽,复制错了。抱歉抱歉

#给出一个32位整数的反转数
try:
    a=int(input('请输入数据:'))
    print('\n结果是:')
    if a<0 :
        a=abs(a)
        print('-',end='')
    while a :
        print(a%10,end='')
        a=a//10
    print('\n运行结束')

except:
    print('请输入整型')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-25 11:08:40 From FishC Mobile | 显示全部楼层
#给出一个32位整数的反转数

try:
    a=int(input('请输入数据:'))
    print('\n结果是:')
    if abs(a)> 2147483647 : #确保不会超出32位
        print('0',end='')
        exit()
    if a<0 :                #保留符号
        a=abs(a)
        print('-',end='')
    while a :
        b=a%10
        if b : print(a%10,end='')  #输出内容
        a=a//10
    print('\n运行结束')

except:
    print('请输入整型')

点评

我很赞同!: 4.0
我很赞同!: 4
还有 1 个问题,exit() 会抛出 SystemExit,导致执行完 exit() 后还打印 '请输入整型'  发表于 2019-8-25 21:49

评分

参与人数 1荣誉 +1 鱼币 +1 贡献 +1 收起 理由
zltzlt + 1 + 1 + 1 还有 1 个问题,exit() 会抛出 SystemExit .

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-25 11:12:10 From FishC Mobile | 显示全部楼层
一往情深深几许 发表于 2019-8-25 11:08
#给出一个32位整数的反转数

try:

这个应该没问题了吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-26 10:01:37 | 显示全部楼层
  1. def change(numstr):
  2.     sym = ''
  3.     if numstr[0] == '-':
  4.         sym = '-'
  5.         numstr = numstr[1:]
  6.     if numstr.isdigit() == 1 and numstr[0] != '0':
  7.         numlist = list(numstr)
  8.         numlist.reverse()
  9.         if sym == '-':
  10.             numlist.insert(0,sym)
  11.             numr = ''.join(numlist)
  12.         else:numr = ''.join(numlist)
  13.         num = int(numr.strip().rstrip())
  14.         if abs(num) >= 2**31:
  15.             print('转换后数值溢出')
  16.             return 0
  17.         else:return num
  18.     else:
  19.         print('输入的不是纯数字')
  20.         return '错误'
  21. while True:
  22.     numstr = input('请输入数字:')
  23.     numb = change(numstr)
  24.     print(numb)
  25.     temp = input('是否继续(Y/N):')
  26.     if temp == 'n' or temp == 'N':
  27.         break
  28.     else:pass
复制代码

评分

参与人数 1荣誉 +2 鱼币 +2 贡献 +1 收起 理由
zltzlt + 2 + 2 + 1

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-26 11:30:55 | 显示全部楼层
本帖最后由 爱吃鱼的mao 于 2019-8-26 12:55 编辑
  1. def function(num):
  2.     data = str(num)           
  3.     res = data[::-1]            # 再修改简化一下
  4.     if num < 0:
  5.         res = res[-1] + res[:-1]
  6.     result = int(res)

  7.     if result not in range(-2**31, 2**31-1):
  8.         return 0
  9.     else:
  10.         return result
  11.       
  12. print(function(123))
  13. print(function(230))
  14. print(function(-230))
  15. print(function(-2581))

  16. 输出:
  17. 321
  18. 32
  19. -32
  20. -1852
复制代码

评分

参与人数 1荣誉 +2 鱼币 +2 贡献 +1 收起 理由
zltzlt + 2 + 2 + 1 代码很美观

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-26 13:17:33 | 显示全部楼层
  1. def newreserve(num):
  2.     listnum=[]
  3.     flag=''     #默认为无符号
  4.     strnum=str(num)
  5.     #print(strnum)
  6.     for index in range(len(strnum)):
  7.         listnum.append(strnum[index])  
  8.     if num<0:       #有符号,需要考虑符号后变换
  9.         flag=listnum.pop(0)
  10.     listnum.reverse()       #列表反向
  11.     result=flag
  12.     for index in range(len(listnum)):
  13.         result+=listnum[index]
  14.     if int(result)<(-2**31) or int(result)>(2**31-1):
  15.         return 0
  16.     else :
  17.         return int(result)
复制代码

评分

参与人数 1荣誉 +1 鱼币 +1 贡献 +1 收起 理由
zltzlt + 1 + 1 + 1 代码可以写的更美观一点哦

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-26 16:06:33 | 显示全部楼层
int reverse(int x) {
    long i = 0;
    long t = x;
    while(t)
    {
        i = 10*i + (t%10);
        t=t/10;
    }
    if(i < INT_MIN || i > INT_MAX)//如果大于或者小于临界值那么返回0
    {
        return 0;
    }
    return i;
}

点评

你用的是 C 语言呢  发表于 2019-8-26 16:08
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-26 16:24:51 | 显示全部楼层
小刘同学 发表于 2019-8-26 16:06
int reverse(int x) {
    long i = 0;
    long t = x;

不好意思,忘记看题目了,用Python
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-28 18:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表