Я пытаюсь найти способ найти длину целого числа (количество цифр), а затем поместить его в массив целых чисел. Присвоение также требует выполнения этого без использования классов из STL, хотя в спецификации программы сказано, что мы можем использовать «общие библиотеки C» (спросите моего профессора, могу ли я использовать cmath, потому что я предполагаю log10 (num) +1 самый простой способ, но мне было интересно, есть ли другой путь).
Ах, и это не должно обрабатывать отрицательные числа. Исключительно неотрицательные числа.
Я пытаюсь создать вариант класса «MyInt», который может обрабатывать более широкий диапазон значений с использованием динамического массива. Любые советы будут оценены! Спасибо!
Количество цифр целого числа n
в любой базе тривиально получается делением, пока вы не закончите:
unsigned int number_of_digits = 0;
do {
++number_of_digits;
n /= base;
} while (n);
Не обязательно самый эффективный, но один из самых коротких и читаемых с использованием C ++:
std::to_string(num).length()
Если вы можете использовать библиотеки C, то один метод будет использовать Sprintf, например
#include <cstdio>
char s[32];
int len = sprintf(s, "%d", i);
«Я имею в виду количество цифр в целом числе, то есть« 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
Закрытая формула для размера int
:
ceil(8*sizeof(int) * log10(2))
РЕДАКТИРОВАТЬ:
Для количества десятичных цифр некоторого значения:
ceil(log10(var+1))
Это работает для чисел > 0
, Ноль должен быть проверен отдельно.
int intLength(int i) {
int l=0;
for(;i;i/=10) l++;
return l==0 ? 1 : l;
}
Вот крошечный эффективный
Будучи компьютерным ботаником, а не математическим ботаником, я бы сделал:
char buffer[64];
int len = sprintf(buffer, "%d", theNum);
Есть гораздо лучший способ сделать это
#include<cmath>
...
int size = log10(num) + 1
....
работает для целых и десятичных