我不知道如何框架這個問題。讓我舉幾個場景來解釋我需要什麼。需要提供的號碼的下一個里程碑號
方案1:
我提供號碼作爲9600和欲被返回10000
方案2:
我提供號碼作爲98700和欲被返回100000
方案3:
我提供的號碼爲196000,我想退貨200000
這就是我真正想要的。 Java或Javascript解決方案都很好。任何幫助將非常感激。在此先感謝
我不知道如何框架這個問題。讓我舉幾個場景來解釋我需要什麼。需要提供的號碼的下一個里程碑號
方案1:
我提供號碼作爲9600和欲被返回10000
方案2:
我提供號碼作爲98700和欲被返回100000
方案3:
我提供的號碼爲196000,我想退貨200000
這就是我真正想要的。 Java或Javascript解決方案都很好。任何幫助將非常感激。在此先感謝
你需要對數爲:
的Javascript:
var base = Math.pow(10, Math.floor(Math.log(number)/Math.log(10)));
var milestone = Math.ceil(number/base) * base;
其中number
是你的電話號碼,並提供是milestone
你想要得到的結果。
這裏會發生什麼:
base
,它是比number
10小功率最大,所以它包含了爲你的電話號碼確實儘可能多的數字。計算我們的數字(log(n)/ log(10))的基數爲10的對數,並將結果作爲10的冪。對於4521例如將是1000嘿,它像一個魅力工作。非常感謝:)馬上接受答案 –
另一個解決方案
public class Test
{
public static void main(final String... args) {
final int number = 98000;
final int mult = (int) Math.pow(10, String.valueOf(number).length() - 1);
System.out.println((number + mult - 1)/mult * mult);
}
}
public long milestone(long original) {
String strNumber = String.valueOf(original);
long result = strNumber.charAt(0) + '1';
for (int i=1; i<strNumber.length(); i++)
result *= 10;
return result;
}
我不確定你需要什麼,但是這段代碼覆蓋了你的例子。
我認爲接受的答案在概念上是最好的。
如果由於某種原因,你需要做出很多里程碑式的計算和性能將是一個問題(這是所有純屬假設),你可以緩存的里程碑,以減少計算開銷如下:
import java.util.SortedSet;
import java.util.TreeSet;
public class MilestoneUtil {
private static final SortedSet<Long> MILESTONES;
static {
MILESTONES = new TreeSet<>();
long base = 1;
for (int i = 0; i < String.valueOf(Long.MAX_VALUE).length(); i++) {
MILESTONES.add(base);
MILESTONES.add(2*base);
MILESTONES.add(3*base);
MILESTONES.add(4*base);
MILESTONES.add(5*base);
MILESTONES.add(6*base);
MILESTONES.add(7*base);
MILESTONES.add(8*base);
MILESTONES.add(9*base);
base *= 10;
}
}
public static long nextMilestone(long current) {
return MILESTONES.tailSet(current).first();
}
public static void main(String[] args) {
printMilestone(9600);
printMilestone(98700);
printMilestone(196000);
}
private static void printMilestone(long input) {
System.out.println(String.format("The next milestone for %d is: %d", input, nextMilestone(input)));
}
}
到目前爲止你做了什麼?你的問題是什麼? –
@ChrisStarling正如我所說我不知道如何框架這個問題。我會盡力傳達。基本上我希望下一個最高的里程碑數字(如果我可以這樣說的話)提供我提供的數字。我在想,但想不出一個邏輯來做到這一點。感謝您的及時回覆 –