分离一个数的每一位

453 阅读2分钟

刷题的时候总会遇到,我需要这个数的个位、十位,分别处理。但是我每次遇到都会迷糊,所以写篇博文用来提醒自己。

单纯的情况

两位数

比如做题的时候,遇到一个十位数,比如1515

  • 个位:15 % 10 = 5
  • 十位:15 / 10 = 1 看样子也挺简单的对吗。我们再来看三位数的。

三位数

这次举例123

  • 个位:123 % 10 = 3
  • 十位:123 / 10 = 12, 12 % 10 = 2
  • 百位:12 / 10 = 1

我们发现三位数的时候就开始有点点混乱了,那我们还是要思考一个通用的方法,无论几位数,直接套方法就走。

通用的方法

先从低位获取

通用方法很简单,就是先计算位数最低的数,再去掉最后一位。在这个步骤上进行循环即可。

int num = 123456;
int num_temp = num; // 保存数字,不破坏原本变量
while(num_temp != 0) {
    System.out.print(num_temp % 10 + " "); // 获取低位
    num_temp /= 10; // 去掉低位
}

最后输出6 5 4 3 2 1

先从高位获取

这样挺好,但是如果我们非要先从高位获取,该怎么做?

也可以做,但是稍稍麻烦点。 首先,获取数字的长度len;其次,对数字进行整除(10len)(10*len)即可获得高位,再进行取余来去掉高位。

让我们看看代码吧。

int num = 123456;
int num_temp = num; // 保存数字,不破坏原本变量
int len = (num_temp+"").length(); // 获取长度

for (int i=len; i>=1; i--) {
    System.out.print(num_temp / (int)Math.pow(10, i-1) + " "); // 获取最高位
    num_temp %= (int)Math.pow(10, i-1); // 去掉最高位;
}

最后输出1 2 3 4 5 6

最后一点题外话

我在编辑这段博文的时候,运行了代码,遇到了很多坑,顺便写出来

  • 当你想实现打印一个数再带着一个空格的时候,你需要15+" ",而不是15+' '。前者是字符串拼接,后者是数字加上空格的ANSI码!!
  • Java很多方法都是在类中实现并封装,不像python可以直接用。有的比赛,比如牛客网那种编辑器,你需要提前记住哪个方法在哪个类里,不然笔试的时候就等哭吧。T_T
  • 有些东西只能通过多刷题才能重视并了解。比如精度的问题,比如如何求解数字长度、数字每位分离等等。