如何将数字分解为数字而不将输入转换为字符串?

时间:2016-06-28 20:17:54

标签: java arrays loops sorting modulo

我正在尝试创建一个程序,用户输入一个整数,然后程序为每个地方添加8(模10)。

输入 4444 会导致 2222 ,而 1111 会导致 9999

由于我不想在循环遍历每个地方(数千,数十,1等)之前将输入转换为字符串,我不知道这是否涉及循环通过一维数组。我将如何在java或伪代码中执行此操作?

4 个答案:

答案 0 :(得分:1)

// length = the length of the number, you can get it by log function
int ans = 0;
for (int i = 0; i < length; ++i) {
    new_digit = ((number / Math.pow(10, i)) % 10 + 8) % 10;
    ans += new_digit * Math.pow(10, i);
}

答案 1 :(得分:1)

取10的余数得到单位数字,删除单位数除以10。

离。

1234 % 10 = 4   <--first digit
1234 / 10 = 123  <-- next number

123 % 10 = 3    <--second digit
123 / 10 = 12   <-- next number

答案 2 :(得分:0)

我不想破坏你的解决方案,但我可以给你一个提示: 正如您所知,您可以通过Number % 10获得最正确的数字,例如9999 % 10 = 9,对吧? 并且除以10“切”最右边的数字,例如9999 / 10 = 999。 这意味着,如果您的最后一个除法等于0,您应该已经完成​​了所有数字。这样做可以分别处理所有数字。困难的部分是将这些单个数字放在一起,如果你“记住”它们的十进制幂,这是可以实现的。这至少是一种完全数字化的方法,而不使用字符串或任何东西。

答案 3 :(得分:0)

解决方案可以使用模数和分区的组合来完成,不需要数组......

在示例中,我将要添加的数字(在您的情况下为8)定义为“可加性”(随意重命名)

public static void main(String[] args) {
    int additivity = 8;
    int k = 4321;
    int result = 0;
    System.out.println("The Original number:\n" + k);
    for (int i = 1; i < 5; i++) {
        result = (k % (int) Math.pow(10, 5 - i)) / (int) Math.pow(10, (4 - i));
        System.out.print((result + additivity) >= 10 ? (result + additivity) % 10 : (result + additivity));
    }
}