輸入任意兩個數,找到兩個數之間的迴文數

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

發佈了57 篇原創文章 · 獲贊 35 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章