【问题标题】:C++ Multiplication for any base任何基数的 C++ 乘法
【发布时间】:2015-08-10 02:13:06
【问题描述】:

如何修改此代码以适用于任何基数? (二进制、十六进制、base 10 等)

int mult(int a, int b, int base){

    if((a<=base)||(b<=base)){ //only 1 digit
        return a*b;
    }
}

【问题讨论】:

  • 这已经适用于任何“基础”。整数本身没有特定的“基数”。 Base 仅在您转换为印刷表示或从印刷表示转换时进入它。
  • 你确定吗?如果我的基数是基数 4,而 'a' 和 'b' 是 3,它将打印 9,这不是基数 4 中的数字
  • 没错。问题不在于乘法,因为答案仍然是九。问题是当您打印结果时,您(可能)以 10 为底进行打印。您需要问的问题是如何将结果转换为以 4 为底的表示形式。
  • 哦,有道理,感谢您的意见
  • 您在寻找类似于en.wikipedia.org/wiki/Binary-coded_decimal(BCD)(二进制编码的十进制)的东西吗?它可以称为十进制编码的东西吗?在这种情况下,您的示例不太正确,因为它不能正确处理进位,例如八进制 3*3 应该是 11not 9

标签: c++ function multiplication base


【解决方案1】:

int 与所有数据类型一样,实际上存储为二进制。通常,如果您正在查看内存(例如调试器),它们会以十六进制表示。 intfloat 等类型仅由各种输出系统格式化为十进制。

由于数据本身是二进制的,因此乘法已经与基数无关。不是产品的展示。例如,假设我有一些 4 位类型:

0010 (2) X 0100 (4) = 1000 (8)

这正是 C++ 的工作方式——只是使用 32 位或 64 位而不是 4 位。

因此,函数不需要以不同的方式乘以不同的基数。您需要的是显示不同碱基的功能。幸运的是,C++ 对此有多种选择。一种是带有 STD 的流标志:

std::cout << std::oct << number << "\n";

但是,其中只有 3 个:hexadecimaldecimaloctal。有几个others,但他们处理的不是base。

如果您需要其他库,我不知道有任何库提供此类库。我搜索了 Boost,但找不到它,但 Boost 很大,而且不太容易搜索,所以它可能。在StackOverflow 上有一些other questions,您可以查看更广泛的用法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-19
    • 2015-06-09
    • 2021-12-08
    • 2022-10-15
    • 1970-01-01
    • 2012-01-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多