如題,編寫一個這樣的程序實現找出兩個數之間的迴文數,先介紹下什麼是迴文數,迴文數就是這個數正過來寫和反過來寫的數值是相等的,如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的朋友怎麼解決?