Ответ 1
Как насчет деления:
int length = 1;
int x = 234567545;
while ( x /= 10 )
length++;
или используйте метод log10
из <math.h>
.
Примечание, что log10
возвращает double
, поэтому вам придется настроить результат.
Как я могу определить длину целого числа? В случае, если у меня есть le: int test (234567545);
Как я знаю, как долго int? Как сказать, что в нем 9 цифр???
* Я пробовал: **
char buffer_length[100];
// assign directly to a string.
sprintf(buffer_length, "%d\n", 234567545);
string sf = buffer_length;
cout <<sf.length()-1 << endl;
Но должен быть более простой способ сделать это или более чистый...
Как насчет деления:
int length = 1;
int x = 234567545;
while ( x /= 10 )
length++;
или используйте метод log10
из <math.h>
.
Примечание, что log10
возвращает double
, поэтому вам придется настроить результат.
Сделайте функцию:
int count_numbers ( int num) {
int count =0;
while (num !=0) {
count++;
num/=10;
}
return count;
}
Никто, кажется, не упомянул о преобразовании его в строку, а затем о получении длины. Я не уверен, насколько это возможно, но это определенно делает это в одной строке кода:)
int num = 123456;
int len = to_string(num).length();
cout << "LENGTH of " << num << " is " << len << endl;
// prints "LENGTH of 123456 is 6"
если "i" - целое число, то
int len ;
char buf[33] ;
itoa (i, buf, 10) ; // or maybe 16 if you want base-16 ?
len = strlen(buf) ;
if(i < 0)
len-- ; // maybe if you don't want to include "-" in length ?
Вы можете использовать stringstream
для этого, как показано ниже
stringstream ss;
int i = 234567545;
ss << i;
cout << ss.str().size() << endl;
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
int i=2384995;
char buf[100];
itoa(i, buf, 10); // 10 is the base decimal
printf("Lenght: %d\n", strlen(buf));
return 0;
}
Помните, что itoa не является стандартной функцией, даже если она поддерживается многими компиляторами.
просматривая через Интернет общую ошибку, чтобы сделать ошибку инициализации переменной счетчика равной 0, а затем ввести тестирование цикла перед циклом до тех пор, пока счетчик не будет равен 0. Цикл do-while идеально подходит, чтобы избежать этого.
unsigned udc(unsigned u) //unsigned digit count
{
unsigned c = 0;
do
++c;
while ((u /= 10) != 0);
return c;
}
вероятно, более дешево проверить, меньше ли u 10, чтобы избежать команд необработанного деления, приращения и cmp для случаев, когда u < 10.
но пока на этой теме, оптимизации, вы можете просто проверить u на постоянные полномочия десять.
unsigned udc(unsigned u) //unsigned digit count
{
if (u < 10) return 1;
if (u < 100) return 2;
if (u < 1000) return 3;
//...
return 0; //number was not supported
}
который сохраняет ваши 3 инструкции на цифру, но менее адаптируется для разных оснований, а не для того, чтобы быть не столь привлекательным, и утомительно писать вручную, и в этом случае вы предпочитаете писать рутину для напишите процедуру перед ее вставкой в вашу программу. потому что C поддерживает только очень конечные числа, 64 бит, 32 бит, 16 бит, 8 бит, вы можете просто ограничить себя максимум при создании подпрограммы для всех размеров.
для учета отрицательных чисел, вы просто отрицаете u, если u < 0 перед подсчетом числа цифр. конечно, сначала создавая стандартную поддержку подписанных номеров.
если вы знаете, что u < 1000, возможно, проще просто написать вместо написания подпрограммы.
if (u > 99) len = 3;
else
if (u > 9) len = 2;
else len = 1;
len = 1 + floor (log10 (n));//С++ code lib (cmath)