Как я могу считать цифры в целом числе без строкового броска?

вам следует перенаправить ваш URL-адрес на новый, есть несколько условий:

301 перенаправление: перманентно перемещено (часто лучше всего для SEO) 302 перенаправление: найдено / перемещено временно 303 перенаправление: см. Перенаправление 307 Другое Временное перенаправление 308 редирект: постоянное перенаправление

33
задан Metaphile 6 July 2012 в 15:47
поделиться

10 ответов

Это должно сделать это:

int length = (number ==0) ? 1 : (int)Math.log10(number) + 1;
51
ответ дан 27 November 2019 в 17:44
поделиться
int length = (int)Math.Log10(Math.Abs(number)) + 1;

Вы, возможно, должны объяснить знак минус..

12
ответ дан 27 November 2019 в 17:44
поделиться

Более эффективное решение, чем повторное подразделение было бы повторено, если операторы с умножаются..., например, (где n является числом, количество которого цифр требуется)

unsigned int test = 1;
unsigned int digits = 0;
while (n >= test)
{
  ++digits;
  test *= 10;
}

, Если существует некоторая разумная верхняя граница на количестве объекта (например, 32-разрядный диапазон неподписанного интервала) затем, еще лучший путь состоит в том, чтобы соответствовать членам некоторого статического массива, например,

// this covers the whole range of 32-bit unsigned values
const unsigned int test[] = { 1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000 };

unsigned int digits = 10;
while(n < test[digits]) --digits;
12
ответ дан 27 November 2019 в 17:44
поделиться

Если Вы собираетесь заполнить число в .NET, то

num.ToString().PadLeft(10, '0') 

мог бы сделать то, что Вы хотите.

4
ответ дан 27 November 2019 в 17:44
поделиться

Можно использовать некоторое время цикл, который, вероятно, будет быстрее, чем логарифм, потому что это использует целочисленную арифметику только:

int len = 0;
while (n > 0) {
    len++;
    n /= 10;
}

я оставляю его как осуществление для читателя для корректировки этого алгоритма для обработки нулевых и отрицательных чисел.

4
ответ дан 27 November 2019 в 17:44
поделиться

Я добавил бы комментарий, но мой счет представителя не предоставит мне то различие.

Все, на что я хотел указать, было этим даже при том, что Журнал (10) является очень изящным (чтение: очень немного строк кода) решение, это - вероятно, то, самое налоговое на процессоре.

я думаю, что ответ jherico является, вероятно, наиболее эффективным решением и поэтому должен быть вознагражден как таковой.

Особенно, если Вы собираетесь быть выполнением этого для большого количества чисел..

2
ответ дан 27 November 2019 в 17:44
поделиться

Так как число не имеет продвижения, обнуляет, Вы преобразовываете так или иначе для добавления их. Я не уверен, почему Вы так стараетесь избегать его для нахождения длины, когда конечным результатом должна будет быть строка так или иначе.

1
ответ дан 27 November 2019 в 17:44
поделиться

Одно решение предоставлено основой 10 логарифмов, немного излишества.

0
ответ дан 27 November 2019 в 17:44
поделиться

Можно циклично выполниться через и удалить 10, считать количество раз, которое Вы циклично выполняете;

int num = 423;
int minimum = 1;
while (num > 10) {
    num = num/10;
    minimum++;
}
0
ответ дан 27 November 2019 в 17:44
поделиться

Хорошо, я не могу сопротивляться: используйте /=:

#include <stdio.h>

int
main(){
        int num = 423;
        int count = 1;
        while( num /= 10)
                count ++;
        printf("Count: %d\n", count);
        return 0;
}
534 $ gcc count.c && ./a.out
Count: 3
535 $ 
0
ответ дан 27 November 2019 в 17:44
поделиться