如题,编写一个这样的程序实现找出两个数之间的回文数,先介绍下什么是回文数,回文数就是这个数正过来写和反过来写的数值是相等的,如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的朋友怎么解决?