PAT-1079 延遲的迴文數
阿新 • • 發佈:2018-12-21
1079 延遲的迴文數 (20 分)
給定一個 k+1 位的正整數 N,寫成 ak⋯a1a0 的形式,其中對所有 i 有 0≤ai<10 且 ak>0。N 被稱為一個迴文數,當且僅當對所有 i 有 ai=ak−i。零也被定義為一個迴文數。
非迴文數也可以通過一系列操作變出迴文數。首先將該數字逆轉,再將逆轉數與該數相加,如果和還不是一個迴文數,就重複這個逆轉再相加的操作,直到一個迴文數出現。如果一個非迴文數可以變出迴文數,就稱這個數為延遲的迴文數。(定義翻譯自 https://en.wikipedia.org/wiki/Palindromic_number )
給定任意一個正整數,本題要求你找到其變出的那個迴文數。
輸入格式:
輸入在一行中給出一個不超過1000位的正整數。
輸出格式:
對給定的整數,一行一行輸出其變出迴文數的過程。每行格式如下
A + B = C
其中 A
是原始的數字,B
是 A
的逆轉數,C
是它們的和。A
從輸入的整數開始。重複操作直到 C
在 10 步以內變成迴文數,這時在一行中輸出 C is a palindromic number.
;或者如果 10 步都沒能得到迴文數,最後就在一行中輸出 Not found in 10 iterations.
。
輸入樣例 1:
97152
輸出樣例 1:
97152 + 25179 = 122331 122331 + 133221 = 255552 255552 is a palindromic number.
輸入樣例 2:
196
輸出樣例 2:
196 + 691 = 887
887 + 788 = 1675
1675 + 5761 = 7436
7436 + 6347 = 13783
13783 + 38731 = 52514
52514 + 41525 = 94039
94039 + 93049 = 187088
187088 + 880781 = 1067869
1067869 + 9687601 = 10755470
10755470 + 07455701 = 18211171
Not found in 10 iterations.
#include<iostream> using namespace std; bool is(string str) { int l=str.length(); for(int i=0;i<l/2;i++) { if(str[i]!=str[l-1-i]) { return false; } } return true; } int main() { int count=0; string str; cin>>str; if(is(str)) { cout<<str<<" is a palindromic number."; return 0; } while(1) { if(count==10) { cout<<"Not found in 10 iterations."; break; } string str1,str2; str1=str2=str; int c; int m=str.length(); for(int i=0;i<m;i++) { c=str[m-1-i]-'0'; str1[i]=c+'0'; } c=0; for(int i=0;i<str.length();i++) { c=c+str[i]-'0'+str1[i]-'0'; str2[i]=c%10+'0'; c/=10; } if(c!=0) { str2+=c+'0'; } int e=str2.length(); for(int i=0;i<e/2;i++) { char k=str2[i]; str2[i]=str2[e-i-1]; str2[e-1-i]=k; } cout<<str<<" + "<<str1<<" = "<<str2<<endl; str=str2; if(is(str)) { cout<<str<<" is a palindromic number."; break; } count++; } return 0; }
注意要用string來儲存數字,而且在進位的計算也要注意