整数の長さ(桁数)を見つけて整数配列に配置する方法を見つけようとしています。この割り当てでは、STLのクラスを使用せずにこれを行うことも求めていますが、プログラム仕様では「一般的なCライブラリ」を使用できると書かれています(log10(num) + 1が最も簡単な方法ですが、別の方法があるかどうか疑問に思いました)。
ああ、これは負の数を処理する必要はありません。負でない数値のみ。
動的配列を使用して、より広い範囲の値を処理できるバリアント「MyInt」クラスを作成しようとしています。ヒントをいただければ幸いです!ありがとう!
任意の基数の整数n
の桁数は、完了するまで除算することで簡単に取得できます。
unsigned int number_of_digits = 0;
do {
++number_of_digits;
n /= base;
} while (n);
必ずしも最も効率的ではありませんが、C++を使用して最も短くて読みやすいものの1つです。
std::to_string(num).length()
Cライブラリを使用できる場合、1つの方法は sprintf を使用することです。
#include <cstdio>
char s[32];
int len = sprintf(s, "%d", i);
「整数の桁数を意味します。つまり、「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
int intLength(int i) {
int l=0;
for(;i;i/=10) l++;
return l==0 ? 1 : l;
}
これは小さな効率的なものです
int
のサイズの閉じた式:
ceil(8*sizeof(int) * log10(2))
編集:
ある値の小数桁数の場合:
ceil(log10(var+1))
これは数字> 0
。ゼロは個別にチェックする必要があります。
より良い方法があります
#include<cmath>
...
int size = log10(num) + 1
....
intおよびdecimalで動作します
最良の方法は、ログを使用して見つけることです。常に機能します
int len = ceil(log10(num))+1;
数学のオタクではなく、コンピューターのオタクであること:
char buffer[64];
int len = sprintf(buffer, "%d", theNum);
方法(0およびネガでも有効):
int digits( int x ) {
return ( (bool) x * (int) log10( abs( x ) ) + 1 );
}
これは効率的なアプローチでしょうか?文字列に変換して長さプロパティを見つけますか?
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
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.
*/
シンプルで非常にシンプルな機能
int intlen(int i)
{
int j=1;
while(i>10){i=i/10;j++;}
return j;
}