【问题标题】:converting Binary Numbers in to decimal numbers将二进制数转换为十进制数
【发布时间】:2011-01-08 02:11:12
【问题描述】:

我需要一个程序在 Java 或 C++ 中将二进制数转换为十进制数。

有没有人可以帮助我。

【问题讨论】:

  • “二进制数”是指包含0和1个字符的字符串吗?
  • 恕我直言,如果有人要求帮助他使用特定的算法/技术/无论如何,您为什么要认为“哦,这是他的作业,我不会写我的意见”?如果是他的作业,会发生什么变化?
  • 如果是作业,他可能不想要“strtol”的答案。
  • @chester89:给家庭作业提供代码答案也是一种不好的形式。解释概念并给出提示是更好的做法,因此他们仍然必须自己处理细节。毕竟应该是练习,而不是“从网上得到的”

标签: java c++


【解决方案1】:

在 C++ 中,有“strtol”、“strtoull”等库函数,它们接受一个字符串和用于转换的基数。如果您需要超过 32 / 64 位,则可以使用仅受可用内存限制的 GMP 库。

【讨论】:

    【解决方案2】:

    使用二进制扩展。例如 1101 1001 是:

    (1 x 2^7) + (1 x 2^6) + (1 x 2^4) + (1 x 2^3) + (1 x 2^0)

    等于:

    217 十进制。

    算法如下:

    1.) 提示用户输入二进制数。

    2.) 将数字存储在数组中。第一个元素,即 anArray[0] 应包含值 1,第二个元素应包含值 0 。 . .

    3.) 实现一个 for 循环来进行计算。

    【讨论】:

    • 最好写成 1
    【解决方案3】:

    Java:

    String binary = "110010101011";
    int decimal = Integer.parseInt(binary, 2);
    

    C++:

    #include <cstdlib>
    const char* binary = "110010101011";
    int decimal = strtol(binary, NULL, 2);
    

    这是Javadoc page for Integer.parseInt,这是manpage for strotol

    【讨论】:

      【解决方案4】:

      算法(在 c/c++ 中):

      const char* binary = "110010101011";
      int decimal = 0;
      
      while ( *binary ) 
      {
          decimal*=2;
          decimal+=*binary-'0';
          binary++ ;
       }
      

      请注意,这不处理无效字符(二进制数字以外的任何字符)。

      【讨论】:

      • 有趣。我发布了一个正确的答案,这是唯一一个显示有效算法的答案,但 6 年后它被否决了。有什么关系?
      【解决方案5】:

      是的,我知道怎么做。

      用途:

      String input0 = "1010";
      String input1 = "10";
      
      int number0 = Integer.parseInt(input0, 2);
      int number1 = Integer.parseInt(input1, 2);
      
      int sum = number0 + number1;`
      

      【讨论】:

        【解决方案6】:

        好的C函数itoa

        【讨论】:

          猜你喜欢
          • 2010-12-08
          • 1970-01-01
          • 1970-01-01
          • 2012-06-26
          • 2014-11-24
          • 2020-04-28
          • 2014-04-21
          • 1970-01-01
          • 2016-12-25
          相关资源
          最近更新 更多