1. 程式人生 > 其它 >迴文數二東華oj

迴文數二東華oj

技術標籤:string東華oj字串與數字相互轉換

迴文數2
時間限制: 10S類別: 字串->較難

問題描述 :

有一天,明明正在做作業,發現了一組很有趣的數字,例如1、11、313等等。他發現這些數字都是左右對稱的,即不論你把這些數字從左讀到右還是從右讀到左,讀出來的數字都是一樣的。於是明明就把這個發現告訴了他爸爸。明明的爸爸是一名數學家,對此型別數字早有研究。他對明明說:“這些是迴文數,是一種特殊的數字,即這些數字的左右兩邊是對稱的。例如:11左右兩邊對稱,313左右也是對稱的。” 明明覺得這很有趣,接著問他爸爸還有什麼和這類迴文數有關的有趣的東西。明明的爸爸就說:“你把這些迴文數轉換成二進位制數,看看是不是也符合迴文數的規則。”明明發現1的二進位制數也是1,符合迴文數的規則;11的二進位制數是1011,不符合迴文數的規則;33的迴文數是100001,符合迴文數的規則。明明就回答爸爸說:“1和33的二進位制數符合迴文數的規則,11的二進位制數則不符合迴文數的規則。” 明明爸爸很滿意明明的回答,又給了明明很多十進位制數,讓他判斷在這些數中哪些數既是十進位制迴文數又是二進位制迴文數。明明起先做起來很有意思,但是時間一長就失去了興趣。他想請你幫個忙,幫他寫一個程式,用來判斷一個數,它的十進位制數是迴文數,且它的二進位制數也是迴文數。

明明的問題可以歸結為:給你一個整數(十進位制),判斷該整數的十進位制數和它的二進位制數是否全為迴文數。

輸入說明 :

你寫的程式要求從標準輸入裝置中讀入測試資料作為你所寫程式的輸入資料。標準輸入裝置中有多組測試資料,每組測試資料僅有一行,每行有一個整數N(0 <= N <= 1000),表示要判斷迴文數的那個數。每組測試資料與其後一組測試資料之間沒有任何空行,第一組測試資料前面以及最後一組測試資料後面也都沒有任何空行。

輸出說明 :

對於每一組測試資料,你寫的程式要求計算出一組相應的運算結果,並將每組運算結果作為你所寫程式的輸出資料依次寫入到標準輸出裝置中。每組運算結果為“Yes”或“No”,如果該數的十進位制數和二進位制數都是迴文數,則輸出“Yes”(不含雙引號),否則輸出“No”(不含雙引號)。每組運算結果單獨形成一行資料,其行首和行尾都沒有任何空格,每組運算結果與其後一組運算結果之間沒有任何空行,第一組運算結果前面以及最後一組運算結果後面也都沒有任何空行。 注:通常,顯示屏為標準輸出裝置。

輸入範例 :
2
999
輸出範例
No
No

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
bool ishui(const string &str)
{
    string str1=str;
    reverse(str1.begin(),str1.end());
    if(str1==str)return 1;
    return 0;
}
void zhuan(const int &a,const int jinzhi,
string &str)//將十進位制數轉換為n進位制的字串// { str.clear(); int num=0; int k=a;char ch; while(k) { ch=k%jinzhi+'0'; str+=ch; k/=jinzhi; } reverse(str.begin(),str.end()); } int main() { string str1,str2; int num; while(cin>>num) { zhuan(num,10,str1); zhuan(num,2,str2); if(ishui(str1)&&ishui(str2)) cout<<"Yes"<<endl; else cout<<"No"<<endl; } return 0; }