【问题标题】:How to determinate the amount of digits in integer in C++? [closed]如何确定 C++ 中整数的位数? [关闭]
【发布时间】: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,得到一个整数。

标签: c++ integer digits


【解决方案1】:

你写的 在我的情况下没有一个有效,例如“000101”它有 6 个数字,但它要么是 4 要么是 3。有帮助吗?

如果整数是 000101,那么前 3 个零将被删除,它将变为 101。
如果它是一个字符串,您只需计算字符串中有多少个字母。
似乎你想表示二进制我会为此使用位数组
编辑:好的,它不是二进制的,它是一个日期,应该存储到字符串中以避免这个 Y2K 错误。

int count = strlen("000101");

【讨论】:

  • 除非 000101 出现在源代码中。然后它实际上是数字 65 :)
猜你喜欢
  • 2010-11-07
  • 1970-01-01
  • 2013-02-18
  • 2021-03-09
  • 1970-01-01
  • 1970-01-01
  • 2019-12-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多