2017-12-25 61 views
0

Intを文字列に変換し、インデクサーをchar配列と同じように位置xに置くことができますが、複数の大きな数値を扱うときにはこの変換がオーバーヘッドになります。文字列を使用せずにIntから個々の数字を取得しますか?

数字を文字列に変換せずに、位置xの数字を取得する方法はありますか?

EDIT:

はあなたのすべてをありがとう、私はベンチマークの提案方法でしょうし、それが文字列に変換するよりも良くあるかどうかを確認します。誰かがより良いアイデアを持っている場合に備えて、スレッドは24時間未回答のままです。

EDIT 2:

ULONG番号にいくつかの簡単なテストの後、私は文字列に変換して桁を抽出する承認答えを参照して、以下に提供される方法に比べて最大50%遅くすることができると結論づけました。

+2

数学的には可能ですが、それは文字列に変換するよりもそれほど頭を下回ることはないと思います。 – sino

+0

シフトした値をcharに変換して変換することができます。 –

+2

@sino:文字列に変換するよりもオーバーヘッドが少ないと思っています。結局のところ、文字列への変換はすべて同じ操作*と*を実行して文字列オブジェクトを構築する必要があります。さらに、1桁だけが必要な場合、OPはその桁に達した時点で停止することができます。 –

答えて

2

あなたはこのような何かを行うことができます:

てみましょう:

int ith_digit(int n, int i) { 
    return (int) (n/pow(10, i)) % 10; 
} 

私たちは私たちが望むことの桁が1の位、一例になる点までの数を減らすことによって、i番目の数字を得ることができます12345の3桁目を欲しかったとしたら、それを123桁に減らして(10桁で割って)、残りの数字を10で割って最後の桁を取得します。

+1

これは問題の解決方法です。これがどのように機能しているのかをもっと詳しく説明すれば、より多くの票を得ることができます。 –

+0

@JimMischel私はジム、私に思い出させるために感謝の説明を追加! –

関連する問題