C++ 查找C+中整数的长度+;

C++ 查找C+中整数的长度+;,c++,C++,在Java中,我使用 int length = String.valueOf(input).length(); 求整数的长度 我的问题是:C++中有类似的方法吗? 我已经尝试了for循环和while循环,例如: while (input > 0){ input/=10; count++; 所以,除了循环之外,C++中还有其他可用的。谢谢您的回答。如果您想要与您用Java编写的内容完全对应,可以使用: int length = to_string(input).lengt

在Java中,我使用

int length = String.valueOf(input).length();
求整数的长度

我的问题是:C++中有类似的方法吗? 我已经尝试了for循环和while循环,例如:

while (input > 0){
    input/=10;
    count++;

所以,除了循环之外,C++中还有其他可用的。谢谢您的回答。

如果您想要与您用Java编写的内容完全对应,可以使用:

int length = to_string(input).length();

请注意,
to_string
是C++11的一个特性。另外,请注意负数。

如果您想要与您用Java编写的内容完全对应,可以使用:

int length = to_string(input).length();
请注意,
to_string
是C++11的一个特性。另外,注意负数

无符号整数位数=0

做{ ++_位数; n/=base;}while(n)

//n是你的基数

无符号整数位数=0

做{ ++_位数; n/=base;}while(n)

//n是你的基数


谈到C++11之前的版本,您可以使用相同的方法,但需要使用

将整数转换为字符数组,然后获取其长度:

char buffer[30];

int length = sprintf(buffer, "%d", input);

以下是关于C++11之前版本的。

讨论方法,您可以使用相同的方法,但需要使用

将整数转换为字符数组,然后获取其长度:

char buffer[30];

int length = sprintf(buffer, "%d", input);

以下是数字的对数。

使用数字的对数,无需首先转换为字符串即可计算数字:

std::size\u t intlen(inti){
如果(i==0)返回1;
否则,如果(i<0)返回2+静态_cast(std::log10(-i));
否则如果(i>0)返回1+静态_cast(std::log10(i));
}
logartihm仅为正数定义,因此负数和零必须分别处理,将
-
符号作为附加字符计数。将
log10
替换为
log2
,以获得二进制位数(这对于任何基数都是可能的)


但是请注意,首先转换为字符串(例如,通过使用
std::to_string
)是一种依赖于区域设置的操作,因此可以为不同的语言设置产生不同的结果-某些区域设置插入千位分隔符(例如
100000
)使用上述公式将不会显示。无需首先使用数字的对数转换为字符串即可计算位数:

std::size\u t intlen(inti){
如果(i==0)返回1;
否则,如果(i<0)返回2+静态_cast(std::log10(-i));
否则如果(i>0)返回1+静态_cast(std::log10(i));
}
logartihm仅为正数定义,因此负数和零必须分别处理,将
-
符号作为附加字符计数。将
log10
替换为
log2
,以获得二进制位数(这对于任何基数都是可能的)


但是请注意,首先转换为字符串(例如,通过使用
std::to_string
)是一种依赖于区域设置的操作,因此可以为不同的语言设置产生不同的结果-某些区域设置插入千位分隔符(例如
100000
)使用上面的公式将不会显示。

除了循环之外,还有递归。例如,对于正整数,可以执行以下操作:

unsigned int len(unsigned int n)
{
    return n ? len(n/10)+1 : 0;
}

除了循环,还有递归。例如,对于正整数,可以执行以下操作:

unsigned int len(unsigned int n)
{
    return n ? len(n/10)+1 : 0;
}


我认为OP对C++11不感兴趣,因为这个问题并不是那么简单@HappyCoder:或者C++11标记不会自动弹出很多次。我认为如果这个人不想要它,他/她应该明确指定它。但即便如此,感谢您的观点:)即使答案不符合OP的要求,我认为它对其他使用C++11的人可能仍然有用。谢谢您的帮助!我认为OP对C++11不感兴趣,因为这个问题并不是那么简单@HappyCoder:或者C++11标记不会自动弹出很多次。我认为如果这个人不想要它,他/她应该明确指定它。但即便如此,感谢您的观点:)即使答案不符合OP的要求,我认为它对其他使用C++11的人可能仍然有用。谢谢您的帮助@CrakC-我已经说过不循环。@n.m.-你能举个例子吗?如果可能的话,@Raphael页面上还有其他解决方案,包括下面发布的类似版本。在发布新问题之前,您是否仔细阅读了所有这些内容?@CrakC-抱歉,我刚刚看到了被接受的答案。@CrakC-我已经说过不循环。@n.m.-您能举个例子吗?如果可能的话,@Raphael页面上还有其他解决方案,包括下面发布的类似版本。在发布一个新问题之前,你有没有仔细阅读过这些内容?@CrakC-对不起,我刚刚看到了被接受的答案。“所以,除了循环之外,”谢谢你的帮助!“所以,除了循环”谢谢你的帮助!谢谢你的帮助!谢谢你的帮助!谢谢你的帮助!谢谢你的帮助!谢谢你的帮助!谢谢你的帮助!