考虑这个数字:785462454105
,我需要一种算法,该算法首先将数字分成最大长度为3(从右侧开始)的组,看起来像这样:
a = 105
b = 454
c = 462
d = 785
我当然知道我可以将数字转换为字符串,但是我想不做任何转换。另外,我不允许使用编程语言中使用的任何数组和任何特殊方法或类(我使用的是Java,但正如我所说,我不允许使用这些函数)。我拥有的唯一工具是循环,条件从句以及数学,算术和逻辑运算符。
也可以使用循环将454000
或462000000
淘汰掉,但是如何摆脱零呢?
请注意,类似1234
的内容应变为:
a = 234
b = 1
答案 0 :(得分:1)
如果除以1000所得的余数,则很容易得到一组最后3位数字。
785462454105 % 1000 == 105
那么您可以去除最后3个数字除以1000:
785462454105 / 1000 == 785462454
循环重复此操作,直到数字变为零就可以了。
剩下的唯一问题是打印前导零:
123045 % 1000 = 45
,但我们要打印045。
通常,您需要一个单独的内部循环,例如,对十进制数字进行计数(除以10,直到变为零),然后打印缺失的零的数量(等于您要减去的位数)。您的电话号码)。
但这是一个简单的案例,您可以通过几个if
来独占它:
long a = 785462454105;
while (a > 0) {
long x = a % 1000;
a /= 1000;
if (x < 10) {
System.out.print("00");
} else if (x < 100) {
System.out.print("0");
}
System.out.println(x);
}