Python:给定一个不超过5位的正整数,判断有几位

方法一:作比较

[root@python markPy]# cat five.py
#!/usr/bin/python3
a=int(input(">>>>"))
if a<10:
    print(1)
elif a<100:   #第一个条件已经过滤了大于9,所以这里区间是11到100
    print(2)
elif a<1000:
    print(3)
elif a<10000:
    print(4)
else:
    print(5)

方法二:使用整除实现,除完后如果是个0或不是个0,这种方法引入了计算,效率会降低,所以能加就不要减,能乘就不要除,能不计算就不计算

i = int(intput(‘>>>‘)
if i // 10000:
    print(5):
elif i // 1000:
    print(4)
elif i // 100:
    print(3)
elif i // 10:
    print(2)
else:
    print(1)

分析:假设是在5位的情况下,不考虑其他状况
In [1]: 6666 // 10000
Out[1]: 0                除以10000为零证明是小于5位数

In [2]: 6666 // 1000
Out[2]: 6                但是如果能被1000整除,它就是一个4位数

In [3]: 6666 // 100
Out[3]: 66

In [4]: 6666 // 10
Out[4]: 666

In [5]: 6666 // 1
Out[5]: 6666

方法三:

a=int(input(">>>"))
if a<0:
    print("Format is wrong")
elif a<100000:    ##限定5位
    if a<10:
        print(1)
    elif a<100:
        print(2)
    elif a<1000:
        print(3)
    elif a<10000:
        print(4)
    else:
        print(5)
else:
    print("请输入一个不超过5位的数")

方法四:字符串处理实现

#!/usr/bin/python3
nnumber=input(">>>>")
length=len(nnumber)
if length>4:
    print(5)
elif length>3:
    print(4)
elif length>2:
    print(3)
elif length>1:
    print(2)
else:
    print(1)

方法五:折半实现

#!/usr/bin/python3
number = int(input("number >> "))
if number >= 100:       ##直接从100开始折
    if number >= 10000:
        print("5")
    elif number >= 1000:
        print("4")
    else:
        print("3")
else:
    if number >= 10:
        print("2")
    else:
        print("1")

方法六:math实现,这种方法比除法的更慢,如果循环100万次就很明显

number=int(input("输入一个不超过5位的正整数: ")
if a<=0 or a>=100000:
    print(‘请输入一个不超过5位的正整数‘)
else:
    import math
    b=int(math.log10(a)+1)
    print(b)

欢迎补充~

  

原文地址:https://www.cnblogs.com/reid21/p/10421544.html

时间: 2024-10-14 00:20:23

Python:给定一个不超过5位的正整数,判断有几位的相关文章

给定两个32位的整数N和M,以及表示比特位置的i和j。编写一个方法,将M插入到N中, * 使得M从N的第j位开始,到第i位结束

1 /* 2 * 给定两个32位的整数N和M,以及表示比特位置的i和j.编写一个方法,将M插入到N中, 3 * 使得M从N的第j位开始,到第i位结束,假定从j位到i位足以容纳M,也即是M=10011 4 * 那么j和i之间至少可以容纳5个数,假如,不可能出现j=3,i=2的情况,因为第三位和第二位之间放不下M 5 * 例如 6 * N=1000000000(1024) 7 * M=10011(19) 8 * i=2,j=6,输出10001001100 9 * 思路如下: 10 * 1.将N中的从

二、给定一个 n 行 m 列的地牢,其中 &#39;.&#39; 表示可以通行的位置,&#39;X&#39; 表示不可通行的障碍,牛牛从 (x0 , y0 ) 位置出发,遍历这个地牢,和一般的游戏所不同的是,他每一步只能按照一些指定的步长遍历地牢,要求每一步都不可以超过地牢的边界,也不能到达障碍上。地牢的出口可能在任意某个可以通行的位置上。牛牛想知道最坏情况下,他需要多少步才可以离开这个地牢。

给定一个 n 行 m 列的地牢,其中 '.' 表示可以通行的位置,'X' 表示不可通行的障碍,牛牛从 (x0 , y0 ) 位置出发,遍历这个地牢,和一般的游戏所不同的是,他每一步只能按照一些指定的步长遍历地牢,要求每一步都不可以超过地牢的边界,也不能到达障碍上.地牢的出口可能在任意某个可以通行的位置上.牛牛想知道最坏情况下,他需要多少步才可以离开这个地牢. 个输入包含 1 个测试用例.每个测试用例的第一行包含两个整数 n 和 m(1 <= n, m <= 50),表示地牢的长和宽.接下来的

老男孩教育每日一题-2017-04-17:使用Shell或Python写一个脚本,CPU使用率超过80%或硬盘超过85%邮件报警

老男孩教育每日一题-2017-04-17: 使用Shell或Python写一个脚本,CPU使用率超过80%或硬盘超过85%邮件报警. 今天是老男孩教育每日一题陪伴大家的第29天.

5、输入一个不超过5位的正整数,编程实现:求出它是几位数,分别输出每位数字。

1 #include<stdio.h> 2 #include<math.h> 3 int flws(int); 4 void main() 5 { 6 int n,j,k=0; 7 printf("请输入一个正整数:\n"); 8 scanf("%d",&n); 9 j=n; 10 while(j!=0) //取位 11 { 12 j/=10; 13 k++; 14 } 15 if(k<=5) 16 flws(n,k); 17

位运算-异或运算-只出现一次的数字-给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素

给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次.找出那个只出现了一次的元素. 示例: 输入: [2,2,1] 输出: 1 输入: [4,1,2,1,2] 输出: 4 GO: func singleNumber(nums []int) int { var num int for i := 0; i < len(nums); i++ { num = num ^ nums[i]; } return num; } PHP: class Solution { /** * @par

给定一个整数实现奇偶bit位互换

1.分别取出所有奇数bit位和偶数bit位 0x55555555(对应二进制奇数bit位为1,偶数bit位全为0)&num 0xaaaaaaaa(对应二进制即偶数bit位为1,奇数bit位全为0)&num 2.将奇数bit位的所有数字<< 1,偶数bit位的数字>> 1,然后做或(|)或者加操作,即有宏定义如下: #define EXCHANGE(num) (((0x55555555 & num) << 1) + ((0xaaaaaaaa &am

给定一个十进制的正整数,写下从1开始,到N的所有整数,然后数一下其中出现“1”的个数。

一.题目: n给定一个十进制的正整数,写下从1开始,到N的所有整数,然后数一下其中出现“1”的个数. n要求: n写一个函数 f(N) ,返回1 到 N 之间出现的 “1”的个数.例如 f(12)  = 5. n在32位整数范围内,满足条件的“f(N) =N”的最大的N是多少. 二.解题思路: 无. 三.程序源码: import java.util.*; public class main { public static void main(String[] args) { // TODO Au

给定一个字符串类型表示的小数,输出其二进制表示

题目 给定一个字符串类型(string)表示的小数,打印出它的二进制表示. 如果这个数无法精确地表示为二进制形式,输出”ERROR”. 解答 整数部分通过不断地对2取余然后除以2来得到其二进制表示, 或是不断地和1按位与然后除以2得到其二进制表示. 小数部分则通过不断地乘以2然后与1比较来得到其二进制表示. 小数部分转化为二进制,通过乘以2然后与1比较,大于等于1则该位为1,并且该值减去1: 否则该位为0.不断地通过这种操作最终能使该小数部分的值变为0的,即可精确表示. 否则将无法用有限的位数来

给定一个数值,输出符合中国人习惯的读法--记一道笔试题

题目:给定一个数字,最大小于一万亿,输出符合中国人习惯的读法,例如: a.12输出:十二 b.102输出:一百零二 c.1002输出:一千零二 d.112输出:一百十二 e.10112输出:一万零一百十二 f.120000000:一亿二千万 g.11021002:一千一百零二万一千零二 h.11020102:一千一百零二万零一百零二 i.1000001:一百万零一 j.1000000001:十亿零一 嗯,一道笔试题,解的很没有节操,没有太好的思路,只能尽力抽取翻译过程中的共有代码,尽量写的不那么