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