用c++编写回文数的判断程序的问题 老是结果不对

alottree 2009-05-09 03:50:21
如题:
代码如下:
#include<iostream>
#include<vector>
using namespace std;
void main()
{
int i=0;
vector<int> huiwen;
int n;
char q;
cout<<"exit until input 0!"<<endl;
while(n!=0){
cin>>n;
huiwen.push_back(n);
}
vector<int>::iterator beg;
vector<int>::iterator mid=huiwen.begin()+(huiwen.size()/2);
vector<int>::iterator fir,las;
fir=huiwen.begin();
las=huiwen.end()-1;
do{
if(fir<mid){
if(*fir==*las){
fir++;las--;
beg++;
}
else{
cout<<"no!!!"<<endl;
}
}
}while(beg==mid);

if(beg==mid)
cout<<"yes!!!"<<endl;

}
...全文
535 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
koulongfei 2009-05-09
  • 打赏
  • 举报
回复
这个代码是要做什么,想要什么结果啊???
lingyin55 2009-05-09
  • 打赏
  • 举报
回复
转个你参考下思路吧,把你原来的先改改

/***************************************************************
1.
函数名称:Symmetry
功能: 判断一个数时候为回文数(121,35653)
输入: 长整型的数
输出: 若为回文数返回值为1 esle 0
******************************************************************/
(1)
unsigned char Symmetry (long n)
{
long i,temp;
i=n; temp=0;
while(i) //不用出现长度问题,将数按高低位掉换
{
temp=temp*10+i%10;
i/=10;
}
return(temp==n);
}
(2)
#include <math.h>
#include <stdio.h>

int digit(int n)
{
return n > 0 ? 1 + digit(n/10) : 0;
}

int rint(int n)
{
return n >= 10 ? n%10 * (int)pow(10.0, digit(n)-1) + rint(n/10) : n;
}

int test(int n)
{
return n == rint(n);
}

int main()
{
for(int i = 0; i < 10000000; ++i)
{
if(test(i))
printf("%d\n", i);
}
}
文章出处:http://www.diybl.com/course/3_program/c++/cppsl/20071119/86953.html
lingyin55 2009-05-09
  • 打赏
  • 举报
回复

#include <iostream>
#include <vector>
using namespace std;
void main()
{
int i=0;
vector <int> huiwen;
int n;
//char q;
cout <<"exit until input 0!" <<endl;
while(n!=0){
cin>>n;
if ( 0 != n )/////这里需要先判断是否为0,
huiwen.push_back(n); ///这里一个数要分多次输入?比如98789,要输入9回车,8回车...?
//else continue;
}
vector <int>::iterator beg=huiwen.begin();/////beg要先初始化,要不都不知道指向哪里
vector <int>::iterator mid=huiwen.begin()+(huiwen.size()/2);
vector <int>::iterator fir,las;
fir=huiwen.begin();
las=huiwen.end()-1;
do{
if(fir != mid){
if(*fir==*las){
fir++;las--;
beg++;
}
else{
cout <<"no!!!" <<endl;
}
}
}while(beg==mid); /////如果beg==mid就循环那么下面的if(beg==mid)肯定不会执行,因为这时beg是指向mid的后面才会退出循环

if(beg==mid)
cout <<"yes!!!" <<endl;

}
光宇广贞 2009-05-09
  • 打赏
  • 举报
回复
while(beg==mid);
这行不太对。

这样的话,一次循环都走不了。
改为不等于。
然后再试试,别的暂没看出什么来。
adventurelw 2009-05-09
  • 打赏
  • 举报
回复
while(n!=0){
cin>>n;
huiwen.push_back(n);
} //这里,n要先初始化再跟0比较,否则结果未必如你预期,也即while(cin >> n && n != 0)

if(fir <mid){
if(*fir==*las){
fir++;las--;
beg++;
} //这里的beg没有经过初始化,乱用也可能出问题;另外,虽然比较fir 和 mid的大小本身没有问题,但限制条件不足,也没明白到底什么意思。


勤奋的沉沦 2009-05-09
  • 打赏
  • 举报
回复
迭代器是这么用的吗?

64,282

社区成员

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

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