Java - 扩展形式的编号

2022-09-04 06:29:33

我已经给出了数字,并希望它以扩展形式返回为字符串。例如

expandedForm(12); # Should return "10 + 2"
expandedForm(42); # Should return "40 + 2"
expandedForm(70304); # Should return "70000 + 300 + 4"

我的函数适用于第一种和第二种情况,但对于70304,它给出了以下结果:

70 + 00 + 300 + 000 + 4

这是我的代码

import java.util.Arrays;


public static String expandedForm(int num)
{

  String[] str = Integer.toString(num).split("");
  String result = "";

  for(int i = 0; i < str.length-1; i++) {
    if(Integer.valueOf(str[i]) > 0) {
      for(int j = i; j < str.length-1; j++) {
        str[j] += '0';
      }
    }
  }

  result = Arrays.toString(str);
  result = result.substring(1, result.length()-1).replace(",", " +");
  System.out.println(result);

  return result;
}

我认为第二个循环有问题,但不知道为什么。


答案 1

您应该将 '0' 添加到 ,而不是:str[i]str[j]

  for(int i = 0; i < str.length-1; i++) {
    if(Integer.valueOf(str[i]) > 0) {
      for(int j = i; j < str.length-1; j++) {
        str[i] += '0';
      }
    }
  }

这将导致:

70000 + 0 + 300 + 0 + 4

您仍然必须摆脱0位数字。

摆脱它们的一种可能的方法:

result = result.substring(1, result.length()-1).replace(", 0","").replace(",", " +");

现在输出是

70000 + 300 + 4

答案 2

伪代码使用整数算术逐个提取十进制数字(从右侧):

mul = 1    //will contain power of 10
while (num > 0):
     dig = num % 10    //integer modulo retrieves the last digit
     if (dig > 0):   //filter out zero summands
          add (dig * mul) to output   //like 3 * 100 = 300
     num = num / 10 //integer division removes the last decimal digit  6519 => 651
     mul = mul * 10    //updates power of 10 for the next digit