C++ - как найти длину целого числа
Я пытаюсь найти способ, чтобы найти длину целого числа (количество цифр), а затем поместить его в массив целых чисел. Задание также требует сделать это без использования классов из STL, хотя спецификация программы говорит, что мы можем использовать "общие библиотеки C" (спрошу моего профессора, могу ли я использовать cmath, потому что я предполагаю, что log10(num) + 1-Самый простой способ, но мне было интересно, есть ли другой способ).
ах, и это не должно обрабатывать отрицательные числа. Исключительно неотрицательные числа.
Я пытаюсь создать класс variant "MyInt", который может обрабатывать более широкий диапазон значений с помощью динамического массива. Любые советы будут оценены! Спасибо!
13 ответов
количество цифр целого числа 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))
EDIT:
для количества десятичных цифр некоторого значения:
ceil(log10(var+1))
это работает для чисел > 0. Ноль должен проверяться отдельно.
будучи компьютерным ботаником, а не математическим ботаником, я бы сделал:
char buffer[64];
int len = sprintf(buffer, "%d", theNum);
есть гораздо лучший способ сделать это
    #include<cmath>
    ...
    int size = log10(num) + 1
....
работает для int и decimal
Как насчет (работает также для 0 и негативов):
int digits( int x ) { 
    return ( (bool) x * (int) log10( abs( x ) ) + 1 );
}
будет ли это эффективным подходом? Преобразование в строку и поиск свойства length?
int num = 123  
string strNum = to_string(num); // 123 becomes "123"
int length = strNum.length(); // length = 3
char array[3]; // or whatever you want to do with the length
код для поиска длины int и десятичного числа:
#include<iostream>
    #include<cmath>
    using namespace std;
    int main()
    {
        int len,num;
        cin >> num;
        len = log10(num) + 1;
        cout << len << endl;
        return 0;
    }
    //sample input output
    /*45566
    5
    Process returned 0 (0x0)   execution time : 3.292 s
    Press any key to continue.
    */
простая и довольно простая функция
int intlen(int i)
    {
    int j=1;
    while(i>10){i=i/10;j++;}
    return j;
    }
