【发布时间】:2011-10-31 13:51:56
【问题描述】:
假设一个向量或数组包含 N 个元素(N 可以很大),其中包含一个非负整数的八进制表示。如何从此数组中获取数字的十进制表示?代码必须非常快。
编辑:N 个元素的数组 A 包含非负整数 K 的八进制表示,即 A 的每个元素都属于区间 [0; 7](包括两端)
示例:A[0] = 2; A[1] = 6; A[2] = 3
现在一个简单的计算将是 2*8pow0 + 6*8pow1 + 3*8pow2 = 2+ 48+ 192 = 242
我试过了,但它似乎不适用于 > 6K 的大输入
//vector<int> A is the input
using namespace std;
vector<int>::iterator it = A.begin();
unsigned int k = 0;
unsigned int x = 0;
while(it < A.end()){
x = x | (*it<<3*k);
k++;
it++;
}
我在将十六进制字符串转换为其十进制表示时也遇到问题?这是在 C++ 中执行此操作的正确方法吗: //假设 S 是包含十六进制表示的输入字符串 //像F23
std::stringstream ss;
ss << std::hex << S;
ss >> x;
【问题讨论】:
-
“非负整数的八进制表示”到底是什么意思?你有一个独特的类型吗?
-
对于搜索"base conversion" 时出现的任意数量的问题,这可能被视为重复。
-
@FredOverflow 我认为该向量包含一个数字,每个单元格包含一个数字(以 8 为基数)。我在纠结的是面试官是否会期望你从袖子里拿出一个任意精度的整数库。
-
@Oli : 我想知道我的代码出了什么问题,如果我们能做得更好..
-
@user:要找出你的代码有什么问题,我建议在调试器中单步调试。