-5

私はJavaで与えられた数の桁数を見つけるプログラムを書きました。それを行うのに良い方法であり、プログラムの時間計算量はどのくらいですか?

import java.util.*;

public class Inst {
     /**
     * @param args
     */
    public static void main(String[] args) {

            Scanner sc = new Scanner(System.in);
             double a = sc.nextDouble();
            for(int n=0;n<200000;n++)
            {
             double b=Math.pow(10, n);

             double d=a/b; 
            if(d>=0 & d<=9)
            {
                System.out.println("The number has "+(n+1)+" DIGITS");
                break;
            }
            }

    }

}
4

5 に答える 5

1
import java.util.*;

public class JavaLength {
  public static void main(String[] args){ 
   Scanner sc = new Scanner(System.in);
   Double d = sc.nextDouble();
   String dString = d.toString();
   System.out.println(d);
   if(dString.contains(".")){
      System.out.println("Total Characters: " + (dString.length() -1 ));
   }else{
      System.out.println("Total Characters: " + (dString.length()));
   } /*-1 for the '.' in between, if it exists!*/
}
于 2013-02-26T01:58:11.437 に答える
1

これはどう?

double input = Input;
int length = (input + "").length();
于 2013-02-26T01:59:28.370 に答える
0

FWIW、整数を表すために必要な(10進数の)桁数をテストする最も効率的な方法は、if/elseテストのツリーになります。複雑さはになりますO(1)が、コードは醜いです(しかし移植性があります)。例えば

int num = ...

if (num >= 0)
    if (num < 1000000)
        if (num < 10000)
            if (num < 100)
                if (num < 10)
                    return 1
                else
                    return 2
            else 
                ...
        else
            ...
    else 
        ...
else 
    ...
于 2013-02-26T03:09:11.773 に答える
0

次の整数に丸められる 10 の累乗に近い数値が存在する可能性があるため、 pow / log を使用することは一般的には適切な解決策ではありません。倍精度では、log10 が絶対値 < 15 になる 15 桁の数値すべてを正確に格納できるはずです。実際には、log10(10^15 - 100) は 15 に丸められます。

10 進数から文字列への変換で内部的に使用される同じアルゴリズムに固執します。

トライアル部門

while (i > 0) { i=i/10;  count++; }

試行乗算:

j=10; while (i >= j) { j*=10; count++; }

文字列に変換するmsb から lsb への除算の試行。

j=10000000; while (i>0) { 
                 while (i>=j) { digit++;i-=j;}; 
                 j/=10; *str++=digit+'0'; digit=0:
            }

ダブル ダブル アルゴリズムを使用したバイナリから bcd への変換。各桁は縮小された 16 進数のセットで表されます (af を省略)。

于 2013-02-26T07:31:30.007 に答える