C++ - 如何查找整数的长度
C++ - how to find the length of an integer
>我正在尝试找到一种方法来查找整数的长度(位数(,然后将其放置在整数数组中。作业还要求在不使用 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;
}
- 查找存储在二叉搜索树的所有非叶子中的数据总和?(返回整数的独立递归函数
- 查找多个向量之间的公共元素(无整数元素)
- 查找满足浮点不等式方程的最小整数
- 递归函数,用于查找 2 个整数之间的最大值
- 在大整数数组中查找子数组
- 查找整数数组中最接近的数字
- C++ 将二进制字符串转换为整数或比较 2 个字符串以查找差异数
- 移位运算符如何在查找两个整数中的不同位数?
- 查找多维数组中整数的出现次数(以C++为单位)
- 在非负整数的未排序数组中查找第 k 个最小元素
- 如何使用字符串流查找字符串中的整数总和?
- 如何在给定任意数量的整数的情况下创建一个唯一键?并使用该键存储,然后从地图中查找
- C++ 在数组中查找整数
- 函数中查找整数部首的意外行为/错误
- 如何使用字符串::与整数查找?C
- 查找整数中的重复模式
- 如何查找具有一组整数的函数的'max absolute sum'
- 查找序列中最大和最小的 2 个整数
- 在C++中使用 for 循环从用户输入中查找最大和最小整数
- 按 3 整数查找值的有效方法