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

C++ - how to find the length of an integer

本文关键字:整数 查找 何查找 C++      更新时间:2023-10-16

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

啊,这不必处理负数。完全非负数。

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

不一定是

最有效的,但使用C++最短和最可读的之一:

std::to_string(num).length()

任何基数中整数n的位数都可以通过除法轻松获得,直到完成:

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

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

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

适用于整数和十进制

更新 27/

07/2023

我们可以使用此行来检查负值和 0 值。

int size = num == 0 ? 1 : (num < 0 ? static_cast<int>(log10(std::abs(num))) + 1 : static_cast<int>(log10(num)) + 1);

如果你可以使用 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的闭合公式(我在这里使用了int,但适用于任何有符号整数类型(:

1 + (int) ceil((8*sizeof(int)-1) * log10(2))

解释:

                  sizeof(int)                 // number bytes in int
                8*sizeof(int)                 // number of binary digits (bits)
                8*sizeof(int)-1               // discount one bit for the negatives
               (8*sizeof(int)-1) * log10(2)   // convert to decimal, because:
                                              // 1 bit == log10(2) decimal digits
    (int) ceil((8*sizeof(int)-1) * log10(2))  // round up to whole digits
1 + (int) ceil((8*sizeof(int)-1) * log10(2))  // make room for the minus sign

对于 4 个字节的int类型,结果为 11。具有 11 个十进制数字的 4 个字节int的示例是:"-2147483648"。

如果你想要某个int值的小数位数,你可以使用以下函数:

unsigned base10_size(int value)
{
    if(value == 0) {
        return 1u;
    }
    unsigned ret;
    double dval;
    if(value > 0) {
        ret = 0;
        dval = value;
    } else {
        // Make room for the minus sign, and proceed as if positive.
        ret = 1;
        dval = -double(value);
    }
    ret += ceil(log10(dval+1.0));
    return ret;
}

我在 x86-64 的 g++ 9.3.0 中针对整个int范围测试了此函数。

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

这是一种有效的方法吗?转换为字符串并查找长度属性?

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

怎么样(也适用于 0 和负数(:

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

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

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

用于查找整数和十进制数长度的代码:

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

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头文件

在 c++ 中不使用任何库的最简单方法是

#include <iostream>
using namespace std;
int main()
{
    int num, length = 0;
    cin >> num;
    while(num){
        num /= 10;
        length++;
    }
    cout << length;
}

您还可以使用此函数:

int countlength(int number)
{
    static int count = 0;
    if (number > 0)
    {
        count++;
        number /= 10;
        countlength(number);
    }
    return count;
}
#include <math.h>
int intLen(int num)
{        
    if (num == 0 || num == 1)
        return 1;
    else if(num < 0)
        return ceil(log10(num * -1))+1;
    else
        return ceil(log10(num));
}

查找数字长度的最有效代码..也计算零,注意"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;
}