python练习(1)——求数字位数,数字正序倒序输出

# 输入若干个数,打印最大值(考虑负数,非用户输入数慎用)
# max = 0
max = int(input('>>>'))
while True:
    inp = int(input('>>>'))
    if not inp:     # 输入0结束
        break
    else:
        if inp >= max:
            max = inp
print(max)

# 100以内的奇数和(判断奇偶,跳步,位运算)
sum = 0
for i in range(1,100,2):
    sum += i
print(sum)

sum = 0
for i in range(100):
    if i&1:
        sum += i
print(sum)

# 输入一个数字计算位数(二分法,与除法计算相比)
import random
import datetime
number = random.randint(1,10**128)
print(number)
start = datetime.datetime.now()
def countwei(num):
    lo = 0
    hi = 128
    while lo < hi:
        mid = (lo+hi)//2
        if num >= 10**mid:
            lo = mid + 1
        else:
            hi = mid
    return lo
digit = coutwei(number)
delta = (datetime.datetime.now()-start).total_seconds()
print(delta)
print('*'*int(digit))
print('#'*50)

# 除法计算number位数
print(number)
start = datetime.datetime.now()
cnt = 0
while number > 0:
    number //= 10
    cnt += 1
delta = (datetime.datetime.now()-start).total_seconds()
print(delta)
print('*'*cnt)

# str计算数字长度,效率高
start = datetime.datetime.now()
length = len(str(onumber))
delta = (datetime.datetime.now()-start).total_seconds()
print(delta)
print('*'*length)

# 数学算法效率最高,import math  math.ceil(math.log(number+1, 10)) 
# 从后到前输出一个数字的每一位,
# while实现
number = random.randint(0,10**6)
print(number)
bi = len(str(number))
# 减法
num1 = number
for i in range(bi):
    c = num1 // 10
    k = num1 - c*10
    print(k,end='')
    num1 = c
print()
num2 = number
while num2 > 0:
    c = num2 // 10
    k = num2 - c*10
    print(k,end='')
    num2 = c
print()
# 除法
num3 = number
while num3 > 0:
    k = num3 % 10
    print(k,end='')
    num3 //= 10
num4 = number
for i in range(bi,0,-1):
    k = num4 // 10**(i-1)
    print(k,end='')
    num4 %= 10**(i-1)
print()
# 最大五位,正序输出,范围给定,充分利用数据, flag达到某一条件状态改变
c = int('04009')
lenth = 5
mxb = 10000
flag = False
for i in range(5):
    k = c//mxb
    if flag:
        print(k,end='')
    else:
        if not k:
            lenth -= 1
        else:
            print(k,end='')
            flag = True
    c %= mxb
    mxb //= 10
print()
print(lenth)

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值