С++ - как найти длину целого числа

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

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

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

Ответ 1

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

unsigned int number_of_digits = 0;

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

Ответ 2

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

std::to_string(num).length()

Ответ 3

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

#include <cstdio>

char s[32];

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

Ответ 4

"Я имею в виду количество цифр в целых числах, то есть" 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 our "length":
std::cout << len;

выходы 3

Ответ 5

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

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

EDIT:

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

ceil(log10(var+1))

Это работает для чисел > 0. Нуль необходимо проверять отдельно.

Ответ 6

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

Здесь крошечный эффективный

Ответ 7

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

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

работает для int и decimal

Ответ 8

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

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

Ответ 9

Как насчет (работает также для 0 и негативов):

int digits( int x ) { 
    return ( (bool) x * (int) log10( abs( x ) ) + 1 );
}

Ответ 10

Лучше всего найти с помощью журнала, он работает всегда

int len = ceil(log10(num))+1;

Ответ 11

Будет ли это эффективным подходом? Преобразование в строку и поиск свойства 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

Ответ 12

Код для нахождения длины целого и десятичного числа:

#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.
    */

Ответ 13

Простая и довольно простая функция

int intlen(int i)
    {
    int j=1;
    while(i>10){i=i/10;j++;}
    return j;
    }

Ответ 14

Наиболее эффективный код для определения длины числа... также учитывает нули, обратите внимание, что "n" - это число, которое нужно дать.

#include <iostream>
using namespace std;
int main()
{
    int n,len= 0;
    cin>>n;
while(n!=0)
    {
       len++;
       n=n/10;
    }
    cout<<len<<endl;
    return 0;
}