Почему эта функция не будет содержать более 10 цифр?

Я написал эту функцию для подсчета и возврата количества цифр или длины числа, переданного функции. Он прекрасно работает, пока вы не скажете ему считать цифры в числе более чем из 10 цифр. В этих случаях он просто возвращает 1.

int digits(int z)
{
int counter = 1;
for ( double y = 9; z > y; y = (y*10) + 9)
{
counter++;
}
return counter;
}

0

Решение

Целое число, скорее всего, 32 бита на вашей целевой машине. Если подписано, целое число содержит значение от (примерно) -2 млрд до +2 млрд. Любой экстремум имеет длину 10 цифр.

Вы можете изменить свой код для работы с 64-битными целыми числами, чтобы увеличить пробег. В противном случае вам нужно будет использовать пользовательское представление (т. Е. Написать собственный большой класс целых чисел), чтобы разрешить произвольно большие числа.

2

Другие решения

Диапазон 4 байтов от –2,147,483,648 в 2,147,483,647

Если вы укажете любое положительное число меньше, чем 2 147 483 647, оно будет засчитано, иначе вернется 1.

1

Я думаю, что вы должны проверить диапазон.
что касается Int это -От 2 147 483 648 до 2 147 483 647
Любое число меньше нижнего предела, т.е. -2 147 483 648, или что-либо больше верхнего предела, то есть 2 147 483 647, в результате даст 1. Это вы указали в вопросе.
кликните сюда для деталей.

0

У вас есть проблемы в вашем коде:

  1. Не учитывая отрицательные значения
  2. Использование плавающей запятой

По адресу 1 .:
Вам нужно абсолютное значение: int u = std :: abs (z).

Внимание: абсолютное значение наиболее отрицательного целого числа не определено.

По адресу 2 .:
Увеличьте счетчик и уменьшите u, если 10 <= ты После этого вы можете использовать свой цикл с int y и u.

Кроме того: Скорее всего, тест, который вы выполняете, проходит отрицательное число из-за переполнения при умножении на 10.

0
По вопросам рекламы [email protected]