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;
}