2017-03-07 12 views
0

この質問の枠組みはわかりません。私が必要とするものを説明するためにいくつかのシナリオを挙げましょう。提供された番号の次のマイルストーン番号が必要です

シナリオ1:

私は9600と番号を提供し、私は返すことにしたい10000

シナリオ2:

私は98700のように番号を提供し、私は

100000を返すことにしたいですシナリオ3:

私は196000として番号を返し、返されたい200000

これは私が欲しいものです。どちらのJavaまたはJavascriptソリューションでも問題ありません。どんな助けでも大歓迎です。

Javascriptを::numberはあなたの番号が提供され、milestoneはあなたが取得したい結果である

var base = Math.pow(10, Math.floor(Math.log(number)/Math.log(10))); 
var milestone = Math.ceil(number/base) * base; 

事前のおかげ

+0

あなたはこれまで何をしていますか?あなたの質問は何ですか? –

+0

@ChrisStarling私が言ったように、私はこの質問のフレームをどうやって作るのか分からない。私は伝えようとする。基本的には、私が提供している番号の次の最高のマイルストーン番号(私がそうであれば)を欲しい。私は考えていましたが、これを行うための論理を考えることができませんでした。迅速な返信をありがとう –

答えて

3

にあなたはそのための対数が必要になります。

はここに何が起こる:

  • 最初に我々はbaseを計算し、それがnumberよりも小さい10の最大の力ですので、あなたの数がそうであるように、できるだけ多くの数字が含まれています。これは、私たちの数字(log(n)/ log(10))の基数10の対数を計算し、その結果を10の累乗として取ることによって行われます。例えば4521の場合、1000となります。
  • そのベースで私たちの数を分割し、次のフル整数に切り上げ、そう/ 1000 = 4.521、4521は切り上げ後5
  • になり、私たちはそのベースと再び乗算し、その結果5000
+0

ちょっと魅力的でした。ありがとうたくさん:)すぐに答えを受け入れる –

0
let value=19600; 
let rounded = Math.ceil(value/100000)*100000; 
console.log(rounded); 
+0

シナリオ1はどのように解決されますか? – Psi

+0

彼は問題を理解していないので、この答えは彼がそれを解決し始めることができるように問題を構成するのに役立ちます。それは丸めの問題です! 「次のマイルストーン」問題ではなく、Math.nextMilestone()もありません。私はそこにいて、何を尋ねるのか分からない。これはプッシュです。 – PEWColina

+0

だから、それはコメントの価値があるだろうが、それは質問への答えではない – Psi

1

別の取得します溶液

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); 
    } 
} 
0
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; 
} 

私は必要なものについてはわかりませんが、このコードはあなたの例をカバーしています。

0

私は受け入れられた答えが概念的に可能な限り最高だと思います。

(これはすべて純粋に仮定に基づくもの)、あなたは次のように計算オーバーヘッドを減らすためにマイルストーンをキャッシュすることができますが、マイルストーンの計算とパフォーマンスの多くが問題になるようにする必要があります何らかの理由場合:

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))); 
    } 
} 
関連する問題