2022年1月6日 python练习

Posted on 2022-01-06  35 Views


洛谷 P1307 [NOIP2011 普及组] 数字反转

题目描述

给定一个整数,请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零(参见样例2)。
输入格式

一个整数 NNN
输出格式

一个整数,表示反转后的新数。
输入输出样例
输入 #1

123

输出 #1

321

输入 #2

-380

输出 #2

-83

说明/提示

数据范围

−1,000,000,000≤N≤1,000,000,000。


这个题用python来写就非常有意思,用字符串进行操作的话有一种很奇妙的写法

x = input()
if x[0] == "-":
    x = "-"+str(int(((x[1:])[::-1])))
    print(int(x))
else:
    print(int(x[::-1]))

当然,也可以用非字符串的处理方法,按位处理

x = int(input())
m = 0
while x != 0:
    if x > 0:
        m = m*10 + x%10
    elif x < 0:
        m = m*10 + x %(-10) #c++则不需要这句
    x = int(x/10)
print(m)

python对负数的取模运算规则和c++不一样,所以需要对负数进行特判

洛谷 P1720 月落乌啼算钱(斐波那契数列)

在这里插入图片描述
这个题用python来写甚至不需要循环,但计算的时候很奇怪的会出现复数,不过还好,调整一下计算顺序即可解决

import math
n = int(input())
a = 1 + math.sqrt(5)
b = 1 - math.sqrt(5)
c = (a/2)**n - (b/2)**n
#print(b,type(b))
print(format(c/math.sqrt(5),'.2f'))

洛谷P2669 [NOIP2015 普及组] 金币

在这里插入图片描述

这题很简单,没啥好说的,直接上代码

n = int(input())
s = 0
count = 0
for i in range(1,n+1):
    if count == n: break
    for j in range(i):
        if count == n: break
        s+=i
        count += 1
print(s)

欢迎来到parafish的个人博客,这里是一个正在努力的ctfer

路虽远,行则必至