输入随便两个数,找到两个数之间的回文数

输入任意两个数,找到两个数之间的回文数

如题,编写一个这样的程序实现找出两个数之间的回文数,先介绍下什么是回文数,回文数就是这个数正过来写和反过来写的数值是相等的,如12321,反过来写还是12321.

先上代码

#include <iostream>
#include <strstream>
#include <math.h>
using namespace std;

bool fun(int);
void main()
{
	int val1,val2;
	cout<<"please enter val1: ";
	cin>>val1;
	cout<<"please enter val2: ";
	cin>>val2;
	for(;val1<val2+1;val1++)
	{
		if(fun(val1)) cout<<val1<<endl;
	}	
}

bool fun(int x)
{
	int num=0;
	int val_old1=x; //保存x的一个副本
	int val_old2=x; //保存x的一个副本
	for(;x!=0;x=x/10) //计算x是几位数
	{
		num++;
	}
	int *element=new int[num]; //用来存放x各位上的数值
	
	for(int i=0;i<num;i++)
	{
		element[i]=val_old1-val_old1/10*10;
		val_old1=val_old1/10;
	}
	int val_new=0;
	for(int i=0;i<num;i++)
	{
		val_new+=element[i]*pow(10.0,num-1-i);
	}

	if(val_new==val_old2)
	{
		return true;
	}
	else
	{
		return false;
	}
}

上面是基本上用c语言写的,没有体现出c++语言的优势,下面利用c++面向对象,使用字符串流和string标准库进行编写程序:

#include <iostream>
#include <sstream>
#include <math.h>
using namespace std;

bool fun(int);
void main()
{
	int val1,val2;
	cout<<"please enter val1: ";
	cin>>val1;
	cout<<"please enter val2: ";
	cin>>val2;
	for(;val1<val2+1;val1++)
	{
		if(fun(val1)) cout<<val1<<endl;
	}
	
}

bool fun(int x)
{
	stringstream oss;  //int 对象转string,利用字符串流实现
	oss<<x;
	string str;
	oss>>str;
	int num=str.size();
	const char* str1=str.c_str();
	string temp;
	for(int i=0;i<num;i++)
	{
		temp=str1[i]+temp;
	}
	int x_new=atoi(temp.c_str()); //string对象转int对象
	if(x_new==x)
		return true;
	return false;
}


本来这是在csdn挑战上看到的挑战题,后来发现我不能参加挑战,但是我确实是在校大学生啊,是我账号设置的不对吗?

这个问题请教下各位csdn的朋友怎么解决?