关于STL里的reverse算法的问题,请高手指教,不知道是不是BUG
ilpr 2005-09-28 04:19:16 以下是小弟的代码:
————————————————————————————————————————————
#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
#include<fstream>
typedef unsigned long Ulong;
using namespace std;
void add(vector<int> &,int jin,vector<int> &m);
void add(vector<int> &v,int jin,vector<int> &m)
{
m.push_back(0);
for(Ulong i=0; i<v.size(); i++)
{
if((v[i]+v[v.size()-i-1]) >= jin)
{
m[i]+=(v[i]+v[v.size()-i-1])%jin;
m.push_back(1);
}
else
{
m[i]+=(v[i]+v[v.size()-i-1])%jin;
m.push_back(0);
}
}
if((v[0]+v[v.size()-1]) < jin)
{
m.erase(m.end()-1,m.end());
}
reverse(m.begin(),m.end());
copy(m.begin(),m.end(),ostream_iterator<int>(cout));
cout << endl;
}
int main()
{
ofstream out("a.txt");
vector<int> v;
vector<int> sum;
int jin,flag=1;
Ulong k=1;
string m;
cout << "请输入2-10进制;";
cin >> jin;
cout << "请输入数字:";
cin >> m;
for(Ulong i=0; i<m.size(); i++)
{
v.push_back(m[i]-'0');
}
while(flag)
{
add(v,jin,sum);
for(Ulong i=0; i<sum.size()/2; i++)
{
if(sum[i] != sum[sum.size()-i-1])
{
flag = 1;
break;
}
else
{
flag = 0;
}
}
cout << "Step" << k << ": ";
out << "Step" << k << ": ";
copy(v.begin(),v.end(),ostream_iterator<int>(cout));
copy(v.begin(),v.end(),ostream_iterator<int>(out));
cout << " + ";
out << " + ";
reverse(v.begin(),v.end()); //下面输出结果出错的地方
copy(v.begin(),v.end(),ostream_iterator<int>(cout));
copy(v.begin(),v.end(),ostream_iterator<int>(out));
reverse(v.begin(),v.end());
cout << " = ";
out << " = ";
copy(sum.begin(),sum.end(),ostream_iterator<int>(cout));
copy(sum.begin(),sum.end(),ostream_iterator<int>(out));
cout << endl;
out << endl;
v = sum;
sum.clear();
k++;
}
system("pause");
}
--------------------------------------------
以下是结果:
---------
这个程序是个测试回文数的程序
先输入进制:10
然后输入数字:196
得到的结果是:
Step1: 196 + 691 = 887
Step2: 887 + 788 = 1675
Step3: 1675 + 5761 = 7436
Step4: 7436 + 6347 = 13783
Step5: 13783 + 38731 = 52514
Step6: 52514 + 41525 = 94039
Step7: 94039 + 93049 = 187088
Step8: 187088 + 880781 = 1067869
Step9: 1067869 + 9687610 = 11036639 //注意这里,我用的reverse算法,但是反转后有错误
Step10: 11036639 + 93663101 = 1131021040
Step11: 1131021040 + 0410210311 = 16433351//这里也有同样的问题
Step12: 16433351 + 15333461 = 31766812
Step13: 31766812 + 21866713 = 53633525
Step14: 53633525 + 52533635 = 106167160
Step15: 106167160 + 061761601 = 167928761
Step16: 167928761 + 167829761 = 335758522
Step17: 335758522 + 225857533 = 561616055
Step18: 561616055 + 550616165 = 1112232220
Step19: 1112232220 + 0222322111 = 1334554331
-----------------------------------
而且在Step9 的结果也不对
以上是测试程序
但是我直接使用1067869作为测试数据的时候就没有问题,请高手指教!!