java5位数取其百位数的数字_例子:循环语句--给定一个不超过5位的正整数,判断该数的位数,依次打印出个位、十位、百位、千位、万位的数字。...

需求:给定一个不超过5位的正整数,判断该数的位数,依次打印出个位、十位、百位、千位、万位的数字。

1 whileTrue:2 a = input("Please enter a number:")3 a =int(a)4 if (a >= 100000) | (a <0):5 print("请输入一个不超过5位的正整数!")6 else:7 if a >= 1000:8 if a >= 10000:9 num = 5

10 else:11 num = 4

12 else:13 if a >= 100:14 num = 3

15 elif a >= 10:16 num = 2

17 else:18 num = 1

19 print("这是一个" + str(num) + "位数!")20 c =a21 print("从个位到万位的位数为:")22 for i inrange(num):23 n = c // 10

24 k = c - n*10

25 print(k,end=' ')26 c =n27 print('\n')

我们来分析一下这个程序,首先是分功能实现需求。第一行是一个while循环,保证程序不间断的输入数字,防止输入一次就退出程序(PS:当然这个程序不完整,如果输入的不是数字的话,还是会退出程序并且报错。)。

然后2~19行是实现判别输入的数字是几位数的功能,因为需求是不超过五位数的正整数,那么我们在判别的时候可以采取“折中”的判别方式,如第7行,我们以1000这个四位数为分割点。这样的好处是提高程序的运行效率。

第4、5行是限制输入正整数的范围,如果用户输入的数字不满足需求的话,那么给出提示信息。

从第20行开始,便是开始实现个位数、十位数、百位数……的数字。c = a,这里为什么不直接调用a这个变量呢?还要将a再赋值给变量c呢?为了程序的可拓展性,防止在后续的程序代码中再次使用a,这样的话能更好的明白a变量到底是哪个数值。

我们看一下这个程序的逻辑结构,假如用户输入的是34981这个五位数,那么c=a=34981,从代码2~19得知,此时的num=5,那么i从range(5)中取值,即循环5次。

第一次循环,n=c//10=34981//10=3498(这里要注意//的意思,表示整数除法,返回不大于结果的一个最大的整数),然后k=c-n*10=34981-3498*10=1,可以看出k就是个位数的数字1,然后c=n=3498。for循环进入第二次循环,n=c//10=3498//10=349,k=3498-349*10=8,而8就是十位数的数字,如此循环,直至循环结束。

当然实现第二个功能的代码不止20~27行这一种,下面再看看几种其他的代码:

1 a *= 10

2 while(a//10) !=0:3 a //= 10

4 print(a%10)5 #第一行a=a*10,这行代码考虑到了边界问题。

6 #while判断语句是a//10不等于0,这里说明a至少必须是个两位数,那么如果输入的是个个位数呢?如果是个位数的话,个位数整除10就是0,不会进入while循环。就算是多位数,比如两位数整除10的话,肯定只会得到十位数,三位数的话只会得到百位和十位,没有a *= 10,这段代码就是有缺陷的。

7 #比如还是输入的是34981,那么第一轮循环a=34981*10=349810,然后进入while循环,349810//10=34981,34981%10=1(这里注意%是取模运算取余数),得出个位数字1之后,a就变成了34981,然后34981//10=3498,3498对10取模为8,得出十位数字8……

1 for i inrange(num):2 print(a % 10)3 a //= 10

4 #循环的范围还是基于正整数的位数,这里num可以用len()获取,num=len(a)。

5 #对10取模运算,每次运算都取余数,几位数就循环几次。

6 #例如输入的还是34981,第一次循环34981对10取模运算,得出1,然后34981//10=3498,进入第二次循环,3498%10=8,然后3498//10=349……

7 #这个程序和上面的程序都用到了取余和取整的结合使用。

考虑一下,如果按照万位、千位、百位、十位、各位的顺序,该如何实现呢?

1 #noinspection PyInterpreter

2 whileTrue:3 a = input("Please enter a number:")4 a =int(a)5 if (a >= 100000) | (a <0):6 print("请输入一个不超过5位的正整数!")7 else:8 if a >= 1000:9 if a >= 10000:10 num = 5

11 else:12 num = 4

13 else:14 if a >= 100:15 num = 3

16 elif a >= 10:17 num = 2

18 else:19 num = 1

20 print("这是一个" + str(num) + "位数!")21 print("从万位到个位的顺序为:")22 for i inrange(num):23 b = 10**(num-1)24 print(a//b,end=' ')25 num -= 1

26 a %=b27 print('\n')

这里主要看的是如何实现从万位到个位每位数字的顺序排列,即从22~26行,因为要从万位数开始排序,那么例如输入的数字是34981,那么需要34981//10000=3得出万位数字,然后怎么取千位的数字呢?34981除以10000之后剩下的余数是4981,那么我们可以采取取模运算,34981%10000=4981,至此,第一轮循环结束,第二轮4981需要整除1000,得到千位数字4……那么来看一下,每一次循环,被除数是从10000,1000,100……这个规律,也就是10的4次方,10的3次方,10的2次方……,而10的(num-1)次方恰恰满足这个规律,因此程序中设定b=10**(num-1),要注意的是,每循环一次,10的次方都需要减1,即25行num -= 1。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值