栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python周练1——题解

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python周练1——题解

Python 题解

刚开始肯定得看懂题目对吧。
所以:

题目翻译

实质上是求一个数n的哥哥数位上的数字的和。
例如有一个数字是 123456 123456 123456
那答案就是 1 + 2 + 3 + 4 + 5 + 6 = 21 1+2+3+4+5+6=21 1+2+3+4+5+6=21

思路

既然是求各位数。
那肯定要把n拆开。
于是想到两种办法:

  • 把n变成字符串str,再把每一个的字符转成int类型,用变量累加起来。
  • 用取模和整除来得到n的各个数位
解决

由于大家没有接触字符串的操作,所以这里用取模和整除来实现。
一 : 一: 一:
数字 123456 123456 123456取模(取模%就是取余数的意思) 10 10 10的时候,得到的是6,即个位数。
取模 100 100 100的时候,得到的是 56 56 56,即后两个数位,取模 1000 1000 1000的时候,得到的是456,即后三个数,以此类推。
二 : 二: 二:
数字 123456 123456 123456整除(整除 / / // //就是取商舍去余数的意思) 10 10 10的时候,得到的是 12345 12345 12345,即前五个数。
整除 100 100 100的时候,得到的是 1234 1234 1234,即前四个数位,取模 1000 1000 1000的时候,得到的是 123 123 123,即前三个数,以此类推。
三 : 三: 三:
当你用取模运算取得了后n位,你就可以用整除运算取得第n位!!!

123456取模与整除

取模 10 10 10
得到 6 6 6
再整除 1 1 1

结果: 6 6 6

取模 100 100 100
得到 56 56 56
且整除 10 10 10

结果: 5 5 5

取模 1000 1000 1000
得到 456 456 456
且整除 100 100 100

结果: 4 4 4

所以思路就很明朗了
Code:

n=int(input())
i=1
mod=10
#取模
sum=0
while i<=n:
    sum=sum+(n%mod//i)
    i=i*10
    mod=mod*10
    #每一次取完第n位,准备取第n+1位,把整除变量和取余变量都乘以10
print(sum)

当然还有更简单的思路
既然第一次取模 10 10 10求得的是第一位数字,那能不能把n的个位削掉呢(整体往右移)
即 123456 − − > 12345 123456-->12345 123456−−>12345,那只需要每次都取模 10 10 10就可以求得每一位的数字之和啦。
Code

n=int(input())
sum=0
while n>0:
    sum=sum+(n%10)
    n=n//10
    #把个位数削掉
print(sum)
总结

时间复杂度 O ( l o g 10 n ) O(log_{10}{}{n}) O(log10​n)
输入数字大概可以去到 1 ⩽ n ⩽ 1 0 100000 1leqslant n leqslant 10^{100000} 1⩽n⩽10100000不超时

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/283455.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号