web-dev-qa-db-ja.com

C ++-整数の長さを見つける方法

整数の長さ(桁数)を見つけて整数配列に配置する方法を見つけようとしています。この割り当てでは、STLのクラスを使用せずにこれを行うことも求めていますが、プログラム仕様では「一般的なCライブラリ」を使用できると書かれています(log10(num) + 1が最も簡単な方法ですが、別の方法があるかどうか疑問に思いました)。

ああ、これは負の数を処理する必要はありません。負でない数値のみ。

動的配列を使用して、より広い範囲の値を処理できるバリアント「MyInt」クラスを作成しようとしています。ヒントをいただければ幸いです!ありがとう!

14
user1888527

任意の基数の整数nの桁数は、完了するまで除算することで簡単に取得できます。

unsigned int number_of_digits = 0;

do {
     ++number_of_digits; 
     n /= base;
} while (n);
23
Kerrek SB

必ずしも最も効率的ではありませんが、C++を使用して最も短くて読みやすいものの1つです。

std::to_string(num).length()
11
Riot

Cライブラリを使用できる場合、1つの方法は sprintf を使用することです。

#include <cstdio>

char s[32];

int len = sprintf(s, "%d", i);
10
Paul R

「整数の桁数を意味します。つまり、「123」の長さは3です」

int i = 123;

// the "length" of 0 is 1:
int len = 1;

// and for numbers greater than 0:
if (i > 0) {
    // we count how many times it can be divided by 10:
    // (how many times we can cut off the last digit until we end up with 0)
    for (len = 0; i > 0; len++) {
        i = i / 10;
    }
}

// and that's our "length":
std::cout << len;

出力3

6
LihO
int intLength(int i) {
    int l=0;
    for(;i;i/=10) l++;
    return l==0 ? 1 : l;
}

これは小さな効率的なものです

4
Naheel

intのサイズの閉じた式:

ceil(8*sizeof(int) * log10(2))

編集:

ある値の小数桁数の場合:

ceil(log10(var+1))

これは数字> 0。ゼロは個別にチェックする必要があります。

4
lvella

より良い方法があります

    #include<cmath>
    ...
    int size = log10(num) + 1
....

intおよびdecimalで動作します

3
droid fiji

最良の方法は、ログを使用して見つけることです。常に機能します

int len = ceil(log10(num))+1;
2
suraz negi

数学のオタクではなく、コンピューターのオタクであること:

char buffer[64];
int len = sprintf(buffer, "%d", theNum);
2
John3136

方法(0およびネガでも有効):

int digits( int x ) { 
    return ( (bool) x * (int) log10( abs( x ) ) + 1 );
}
2
Sir Alucard

これは効率的なアプローチでしょうか?文字列に変換して長さプロパティを見つけますか?

int num = 123  
string strNum = to_string(num); // 123 becomes "123"
int length = strNum.length(); // length = 3
char array[3]; // or whatever you want to do with the length
1
Aris94

Intの長さと10進数を見つけるためのコード:

#include<iostream>
    #include<cmath>
    using namespace std;
    int main()
    {
        int len,num;
        cin >> num;
        len = log10(num) + 1;
        cout << len << endl;
        return 0;
    }
    //sample input output
    /*45566
    5

    Process returned 0 (0x0)   execution time : 3.292 s
    Press any key to continue.
    */
1
Tanim_113

シンプルで非常にシンプルな機能

int intlen(int i)
    {
    int j=1;
    while(i>10){i=i/10;j++;}
    return j;
    }
0
PYK