我正试图从SPOJ解决这个问题 http://www.spoj.com/problems/PALIN/
这是我的代码 http://ideone.com/03Dd8u
#include<iostream>
#include<vector>
typedef unsigned int ui;
using namespace std;
ui revNum(ui a)
{
ui rev,tmp=a;
while(tmp>0){
rev=rev*10+(tmp%10);
tmp=tmp/10;
}
return rev;
}
ui palin(ui k)
{
ui num=k,rev=revNum(num);
while(num!=rev){
num++;
}
return num;
}
int main()
{
ui t,out;
vector<ui> k;
cin>>t;
for(ui i=0;i<t;i++){
cin>>k[i];
out=palin(k[i]);
cout<<out<<endl;
}
return 0;
}
但我不断收到运行时错误。有人可以在我的代码中识别错误吗?
答案 0 :(得分:2)
您正在引用不存在的向量中的索引。这一行:
cin>>k[i];
插入带索引i的向量,但该索引不存在。 []运算符不执行边界检查。
尝试将代码更改为:
ui tmp;
cin >> tmp;
k.push_back(tmp);
如您所见:http://en.cppreference.com/w/cpp/container/vector/operator_at边界检查未执行。
答案 1 :(得分:2)
我只能看到一个明显的错误,那就是
行cin >> k[i];
在这一行中,您似乎访问了一个数组元素,但是数组元素还没有存在。要添加到矢量,请使用push_back
- 方法,如下所示:
ui in;
cin >> in;
k.push_back(in);
从那时起,您可以访问k [i],因为数组元素现在存在。
或者,根本不要使用矢量。
for(ui i=0;i<t;i++){
ui in;
cin >> in;
out = palin(in);
cout<<out<<endl;
}
请参阅?无需矢量。
答案 2 :(得分:1)
你的问题在这里:
vector<ui> k;
cin>>t;
for(ui i=0;i<t;i++){
cin>>k[i];
您永远不会在k
中分配任何空格。为了安全起见,您可以使用k.at(i)
,如果空间不存在,将引发异常。在循环之前,您可以k.resize(t)
。