Количество цифр может быть вычислено без преобразования в строку сначала с помощью логарифм этого числа:
std::size_t intlen(int i) {
if (i == 0) return 1;
else if (i < 0) return 2 + static_cast<std::size_t>(std::log10(-i));
else if (i > 0) return 1 + static_cast<std::size_t>(std::log10(i));
}
logartihm определяется только для положительных чисел, так негативов и ноль должны быть обработаны по отдельности, считая знак -
в качестве дополнительного символа. Замените log10
на log2
, чтобы получить число двоичных цифр (это возможно для любой базы).
Однако здесь следует отметить, что преобразование в строки первого (например, с помощью std::to_string
) является Локальнозависимой операцией и может, таким образом, дают разные результаты для различных языковых настроек - некоторые локали вставить разделитель тысяч (например, 100,000
), который не будет отображаться с использованием приведенная выше формула.
http://en.cppreference.com/w/cpp/string/basic_string/to_string –
@CrakC - Я уже сказал, нет петель. – Raphael
@ н.м. - Не могли бы вы привести пример? Если возможно. – Raphael