【发布时间】:2021-02-07 01:43:35
【问题描述】:
所以我正在研究一个有竞争力的编程问题,你需要以 2 和 3 为底的两个数字,然后对它们进行一些运算。我得到了正确实现的代码,但是它不适用于大输入。例如,当我尝试输入 10010111011100101101100011011(基数二)和 211010102022001220(基数三)时。这是因为我将它们作为常规整数输入,然后将它们转换为实际的以 10 为底的值。
这是我的转换函数(仅适用于基数 2 和 3)
int conv(int base, ll n){
int result = 0;
if(base == 2){
int a = 0;
while(n > 0){
if(n % 2 == 1){
result += pow(2, a);
}
a++;
n /= 10;
}
return result;
}
else if(base == 3){
int a = 0;
while(n > 0){
result += (n%10)%3 * pow(3, a);
a++;
n /= 10;
}
return result;
}
return result;
当我在 conv(2, 1010) 等非常小的数字上运行此函数时,它可以工作;我得到 10(将 1010 base 2 转换为 base 10)
但是,如果我想输入 10010111011100101101100011011(base 2),我的代码似乎不起作用。有没有其他方法可以做到这一点?
【问题讨论】:
-
10010111011100101101100011011(以 10 为基数)太长,不适合标准 C++ 整数类型。将它们作为字符串读取。 -
如果函数是基于字符串的,你如何创建它?
-
与创建任何其他函数的方式相同:为它编写代码,测试它,看看它是否有效,如果不能找出原因,修复它,再试一次,等等。不幸的是,stackoverflow.com 不是 C++ 教程网站。有关如何在 C++ 中做很多事情的更多信息,a good C++ textbook 将是您的最佳资源。
标签: c++ algorithm binary integer base