我想构建一个方法,如果输入的数字是数千(例如1000
),则输出3458
,如果输入的数字是数百,则100
,依此类推。这可能吗?
答案 0 :(得分:5)
当然有可能。你为什么不发表你所尝试的内容,我们可以指导你如何解决任何问题。
答案 1 :(得分:4)
正如史蒂夫所说的那样,首先给自己做一点尝试是个好主意,然后带着一个特定的问题来到SO(即“我正在做X,这是我的代码,为什么不是Y发生?” )。
然而,作为一个小提示,假设你有纯粹的数字输入(即它总是只是一个数字流,没有“,”或类似的东西),你实际上可以只使用字符串来处理 - 没有需要使用数值类型(int等)...
(好吧,考虑到这一点,最后可能会有一些数学,以获得'100'或'1000'等的最终结果,但不多。)
答案 2 :(得分:2)
要扩展Yuval提供的内容,如果您不关心数字的符号(即,输入值,例如+3456和-3456都应返回1000),则可以使用绝对值输入:
return Math.pow(10, Math.floor(Math.log( Math.abs(n) ) / Math.log(10))); // for input n
如果你想处理所有可能的数字输入,你也可以在计算之前处理零值:
if (n == 0) // for input n
return 0;
return Math.pow(10, Math.floor(Math.log( Math.abs(n) ) / Math.log(10))); // for input n
log(0)未定义,所以你不想在n == 0时执行计算。你会得到一个有趣的答案(如果你得到答案......我没有运行这段代码)。鉴于您提供的问题的描述,我认为当输入为0时返回0是有意义的。零不是数千或数百或数十或者 - 在整数中,它是它自己的类别。所以你可以返回0.或者你可以抛出异常。
答案 3 :(得分:2)
它不是花哨的,但它简单易读。
private static void homework(int n) {
if (n > 9999) {
System.out.println("Really big");
} else {
if (n <= 99 ) {
System.out.println("Really small");
} else if (n <= 999) {
System.out.println("Hundred");
} else if ( n <= 9999) {
System.out.println("Thousand");
} else {
System.out.println("How did this get here? I'm not good with computer!");
}
}
}
答案 4 :(得分:1)
简单的数学:
Math.pow(10, Math.floor(Math.log(n) / Math.log(10))) // for given n
答案 5 :(得分:1)
循环可以用来避免使用double和最终的舍入问题(如果将结果转换为int
)。
循环变量以1开始,每次传递乘以 10,而(下一个)结果小于输入数字。
负输入和零输入需要特殊处理。