【发布时间】:2016-03-02 17:10:03
【问题描述】:
我正在尝试将 int 向量转换为 int。我就是这样进行的:
#include <iostream>
#include <cmath>
#include <vector>
using namespace std;
uint32_t toInt(vector<int> v)
{
uint32_t x=0;
for(int i=0 ; i<v.size() ; i++)
x+=v[i]*pow(10, v.size()-1-i);
return x;
}
int main()
{
vector<int> v = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
cout << toInt(v) << endl; // displays: 123456787 (???)
}
程序应该输出 123456789,但我有 12345678(!)7(!)。
我在 Code::Blocks 13.12 上使用 GCC (tdm-1) 4.7.1
有人对此问题有解释,以及解决方法吗? 谢谢。
【问题讨论】:
-
我敢打赌这与可用的
pow重载有关。知道你的 GCC 版本不会有什么坏处——你通常还应该在你的问题中包含所有这些信息(包括所有包含!!)。 -
离题性能说明:
pow旨在处理 3.14 到 1/2.78 的幂等奇怪的东西。如果您是powing 整数,那么乘法几乎总是更快。在这种情况下,x*=10; x+=v[i];替换x+=v[i]*pow(10, v.size()-1-i);的开销和麻烦要少得多(但需要在for的主体周围加上括号)。 `