вам следует перенаправить ваш URL-адрес на новый, есть несколько условий:
301 перенаправление: перманентно перемещено (часто лучше всего для SEO) 302 перенаправление: найдено / перемещено временно 303 перенаправление: см. Перенаправление 307 Другое Временное перенаправление 308 редирект: постоянное перенаправление
Это должно сделать это:
int length = (number ==0) ? 1 : (int)Math.log10(number) + 1;
int length = (int)Math.Log10(Math.Abs(number)) + 1;
Вы, возможно, должны объяснить знак минус..
Более эффективное решение, чем повторное подразделение было бы повторено, если операторы с умножаются..., например, (где 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;
Если Вы собираетесь заполнить число в .NET, то
num.ToString().PadLeft(10, '0')
мог бы сделать то, что Вы хотите.
Можно использовать некоторое время цикл, который, вероятно, будет быстрее, чем логарифм, потому что это использует целочисленную арифметику только:
int len = 0;
while (n > 0) {
len++;
n /= 10;
}
я оставляю его как осуществление для читателя для корректировки этого алгоритма для обработки нулевых и отрицательных чисел.
Я добавил бы комментарий, но мой счет представителя не предоставит мне то различие.
Все, на что я хотел указать, было этим даже при том, что Журнал (10) является очень изящным (чтение: очень немного строк кода) решение, это - вероятно, то, самое налоговое на процессоре.
я думаю, что ответ jherico является, вероятно, наиболее эффективным решением и поэтому должен быть вознагражден как таковой.
Особенно, если Вы собираетесь быть выполнением этого для большого количества чисел..
Так как число не имеет продвижения, обнуляет, Вы преобразовываете так или иначе для добавления их. Я не уверен, почему Вы так стараетесь избегать его для нахождения длины, когда конечным результатом должна будет быть строка так или иначе.
Одно решение предоставлено основой 10 логарифмов, немного излишества.
Можно циклично выполниться через и удалить 10, считать количество раз, которое Вы циклично выполняете;
int num = 423;
int minimum = 1;
while (num > 10) {
num = num/10;
minimum++;
}
Хорошо, я не могу сопротивляться: используйте /=
:
#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 $