关于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作为测试数据的时候就没有问题,请高手指教!!
...全文
195 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
healer_kx 2005-09-28
  • 打赏
  • 举报
回复
就说没有啥大问题嘛.
xiaocai0001 2005-09-28
  • 打赏
  • 举报
回复
看来得抓紧时间看关于STL的东西

这方面一点不明白~~
-_-!
xiaocai0001 2005-09-28
  • 打赏
  • 举报
回复
gxgx

可惜我是帮不上忙啊~

ilpr 2005-09-28
  • 打赏
  • 举报
回复
谢了,解决了!!!
ilpr 2005-09-28
  • 打赏
  • 举报
回复
大哥给点提示!!好吗?
healer_kx 2005-09-28
  • 打赏
  • 举报
回复
仅仅是逻辑的问题了,你还是仔细看看吧.

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧