Jos*_*shD 10
对于正数,请使用log10:
int a = 1234;
int len = static_cast<int>(log10(a)+1.);
Run Code Online (Sandbox Code Playgroud)
如果你需要彻底:
int length(int a)
{
int b = abs(a);
if (b == 0) return 1;
return static_cast<int>(log10(b)+1.);
}
Run Code Online (Sandbox Code Playgroud)
话虽如此,在实践中重复除以10将是更好的选择.
int length(int a)
{
int b = 0;
for (a = abs(a); a != 0; b++, a /= 10) continue;
return b;
}
Run Code Online (Sandbox Code Playgroud)
你可能意味着你有一个字符串包含数字而不是python中的int:
>>> i = 123456789
>>> len(i)
Traceback (most recent call last):
File "<console>", line 1, in <module>
TypeError: object of type 'int' has no len()
>>> len(str(i))
9
Run Code Online (Sandbox Code Playgroud)
如果在c ++中也是这种情况,使用以下方法很容易找到字符串的长度:
my_str_value.length()
Run Code Online (Sandbox Code Playgroud)
或者使用C字符串 strlen
C++库中没有这样的功能.但是,您可以使用std::stringstream简单.
试试这个(处理负数也是如此).
int a =-12345,x;
x = std::abs(a)
std::stringstream s;
s << x;
std::cout<<s.str().size();
Run Code Online (Sandbox Code Playgroud)
嗯... Python:
>>> len(5)
Traceback (most recent call last):
File "<pyshell#45>", line 1, in <module>
len(5)
TypeError: object of type 'int' has no len()
Run Code Online (Sandbox Code Playgroud)
不是你想要的?
好吧,假设你有一个实际的整数.日志基地10会告诉你想知道的数字是什么,那就是如果yournumber == pow(10, digits),那么log10(yournumber) == digits!不幸的是,如果你的数字不是10的精确幂,你将有一小部分要处理.但是,这很容易处理floor(),只是向下舍入的功能.警惕负数,因为非正值的实数中的对数未定义.
#include <iostream>
#include <math.h>
int main()
{
std::cout << floor(log10(5))+1 << std::endl;
std::cout << floor(log10(30))+1 << std::endl;
std::cout << floor(log10(2000))+1 << std::endl;
std::cout << floor(log10(16000))+1 << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
我们必须加1,因为10到1'仍然是10,所以我们一个接一个.添加一个到指数,你有数字!
处理负数和输入为零的情况有点棘手:
int length(int n)
{
int len = 0;
if (n < 0) { len = 1; n = -n; }
while (n > 9) {
n /= 10;
len++;
}
return len+1;
}
Run Code Online (Sandbox Code Playgroud)