C ++ - 如何查找整数的长度

时间:2014-03-26 00:13:16

标签: c++ count numbers integer digits

我正在尝试找到一种方法来查找整数的长度(位数),然后将其放在整数数组中。赋值还要求不使用STL中的类来执行此操作,尽管程序规范确实说我们可以使用“常用C库”(要问我的教授我是否可以使用cmath,因为我假设log10(num) + 1是最简单的方法,但我想知道是否有另一种方式)。

啊,这不需要处理负数。非负数。

我正在尝试创建一个变体“MyInt”类,它可以使用动态数组处理更广泛的值。任何提示将不胜感激!谢谢!

16 个答案:

答案 0 :(得分:23)

任何基数中的整数n的位数通过划分直至完成后得到:

unsigned int number_of_digits = 0;

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

答案 1 :(得分:11)

不一定是效率最高的,但是使用C ++最短且最易阅读的一个:

std::to_string(num).length()

答案 2 :(得分:9)

如果您可以使用C库,那么一种方法是使用sprintf,例如

#include <cstdio>

char s[32];

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

答案 3 :(得分:6)

“我是指整数中的位数,即”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

答案 4 :(得分:4)

int

大小的封闭公式
ceil(8*sizeof(int) * log10(2))

编辑:

对于某些值的小数位数:

ceil(log10(var+1))

这适用于数字> 0。零必须单独检查。

答案 5 :(得分:4)

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

这是一个非常有效的

答案 6 :(得分:2)

作为一名计算机书呆子而不是数学书呆子,我会这样做:

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

答案 7 :(得分:2)

有一种更好的方法可以做到这一点

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

适用于int和decimal

答案 8 :(得分:2)

如何(也适用于0和底片):

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

答案 9 :(得分: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

答案 10 :(得分:1)

查找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.
    */

答案 11 :(得分:1)

最好的方法是找到使用日志,它始终有效

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

答案 12 :(得分:0)

简单明了的功能

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

答案 13 :(得分:0)

C/C++ 和 STL 中都没有内置函数来查找整数的长度,但是可以找到的方法很少
这是一个用于查找整数长度的示例 C++ 代码,它可以写在一个函数中以供重用。

#include<iostream>
using namespace std;

int main()
{
  long long int n;
  cin>>n;
  unsigned long int integer_length = 0;

  while(n>0)
  {    
   integer_length++;
   n = n/10; 
  }
 
  cout<<integer_length<<endl;

 return 0;
}

这是另一种方法,将整数转换为字符串并找到长度,它用一行来完成:

#include<iostream>
#include<cstring>
using namespace std;

    int main()
    {
        long long int n;
    cin>>n;
    unsigned long int integer_length = 0;
    
    // convert to string
    integer_length = to_string(n).length();
    
    cout<<integer_length<<endl;

    return 0;
    }

注意:一定要包含 cstring 头文件

答案 14 :(得分:0)

最简单的方法是:

#include <string> 

int int_length = to_string(42).length();

答案 15 :(得分:-1)

查找数字长度的最有效代码。也计算零,请注意“ n”是要给出的数字。

 $result = call_user_func_array('array_merge', array($a));