【发布时间】:2014-01-05 03:23:52
【问题描述】:
我正在尝试确定 C++ 中整数的位数,到目前为止,我尝试了以下方法:
1.
unsigned GetNumberOfDigits (unsigned i)
{
return i > 0 ? (int) log10 ((double) i) + 1 : 1;
}
2.
int length_of_int(int input){
int length = 0;
while(input > 0){
length++;
input /= 10;
if(input == 0)
length++;
}
return length;
}
3.
int NumDigits(int x)
{
x = abs(x);
return (x < 10 ? 1 :
(x < 100 ? 2 :
(x < 1000 ? 3 :
(x < 10000 ? 4 :
(x < 100000 ? 5 :
(x < 1000000 ? 6 :
(x < 10000000 ? 7 :
(x < 100000000 ? 8 :
(x < 1000000000 ? 9 :
10)))))))));
}
在我的情况下没有一个有效,例如“000101”它有 6 位数字,但它显示 4 或 3。有什么帮助吗?
这样做的目的是检查一个有效的日期,格式为 YYMMDD。我知道这种格式有 Y2K 错误,但它在任务中指定它必须是那个。
【问题讨论】:
-
作为一个整数,000101 和 101 是一样的……所以它真的有 3 位数字。如果左侧 0 很重要,也许你应该使用字符串。获取字符串的位数甚至更容易,但它也接受字符。
-
获取 000101 的 6 位数字的唯一方法是将数字作为字符串。
-
除了前两个 cmets:一旦
00010被解释为整数,有关前导零的信息就会丢失。您必须从输入开始使用字符串方法。 @user2699298 这在逻辑上是不可能的。 -
@user2699298 关键是,您不需要计算任何东西。结果是总是 6。但是我相信这是XY-Problem 的一个实例。也许您想发布整个练习和您的想法。
-
如果您需要验证日期输入,请将输入作为字符串并首先将其分隔为 3 个不同的整数变量:年、月和日...然后您验证,检查适当的范围。然后你把年乘以 10000,月乘以 100,日乘以 1,得到一个整数。