count — как найти длину целого числа

Я пытаюсь найти способ найти длину целого числа (количество цифр), а затем поместить его в массив целых чисел. Присвоение также требует выполнения этого без использования классов из STL, хотя в спецификации программы сказано, что мы можем использовать «общие библиотеки C» (спросите моего профессора, могу ли я использовать cmath, потому что я предполагаю log10 (num) +1 самый простой способ, но мне было интересно, есть ли другой путь).

Ах, и это не должно обрабатывать отрицательные числа. Исключительно неотрицательные числа.

Я пытаюсь создать вариант класса «MyInt», который может обрабатывать более широкий диапазон значений с использованием динамического массива. Любые советы будут оценены! Спасибо!

13

Решение

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

unsigned int number_of_digits = 0;

do {
++number_of_digits;
n /= base;
} while (n);
22

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

Не обязательно самый эффективный, но один из самых коротких и читаемых с использованием C ++:

std::to_string(num).length()
10

Если вы можете использовать библиотеки C, то один метод будет использовать Sprintf, например

#include <cstdio>

char s[32];

int len = sprintf(s, "%d", i);
9

«Я имею в виду количество цифр в целом числе, то есть« 123 »имеет длину 3»

int i = 123;

// the "length" of 0 is 1:
int len = 1;

// and for numbers greater than 0:
if (i > 0) {
// we count how many times it can be divided by 10:
// (how many times we can cut off the last digit until we end up with 0)
for (len = 0; i > 0; len++) {
i = i / 10;
}
}

// and that's our "length":
std::cout << len;

выходы 3

6

Закрытая формула для размера int:

ceil(8*sizeof(int) * log10(2))

РЕДАКТИРОВАТЬ:

Для количества десятичных цифр некоторого значения:

ceil(log10(var+1))

Это работает для чисел > 0, Ноль должен быть проверен отдельно.

4
int intLength(int i) {
int l=0;
for(;i;i/=10) l++;
return l==0 ? 1 : l;
}

Вот крошечный эффективный

4

Будучи компьютерным ботаником, а не математическим ботаником, я бы сделал:

char buffer[64];
int len = sprintf(buffer, "%d", theNum);
2

Есть гораздо лучший способ сделать это

    #include<cmath>
...
int size = log10(num) + 1
....

работает для целых и десятичных

2
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector