給定一個?k+1?位的正整數?N,寫成?a?k???a?1??a?0???的形式,其中對所有?i?有?0≤a?i??<10?且?a?k??>0。N?被稱為一個回文數,當且僅當對所有?i?有?a?i??=a?k?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.
//c #include<iostream> #include<cstring> using namespace std; const int maxn = 1100; char a[maxn] = {0},b[maxn] = {0};bool isPalindromic(char a[]){int len = strlen(a);for(int i = 0; i < len/2; i++){if(a[i] != a[len - i- 1]) return false;}return true; }void reverse(char a[],char b[]){ //reverse a to bint len = strlen(a);for(int i = 0; i < len; i++){b[len - i - 1] = a[i];}//b[len] = '\0'; }void addToA(char a[],char b[]){int len = strlen(a);int carry = 0;for(int i = 0; i < len; i++){int temp = (a[i] - '0') + (b[i] - '0')+ carry;b[i] = temp % 10 + '0';carry = temp / 10; }if(carry != 0) b[len] = carry + '0';reverse(b,a);//carry[len] = '\0'; }int main(){ //fgets(a,maxn,stdin); cin.getline(a,maxn);int cnt = 0;while(isPalindromic(a) == false && cnt < 10){reverse(a,b);printf("%s + %s = ",a,b);addToA(a,b);printf("%s\n",a);cnt++;}if(isPalindromic(a)){printf("%s is a palindromic number.",a);}else{printf("Not found in 10 iterations.");}return 0; }
//C++ #include<iostream> #include<algorithm> using namespace std;bool isPalindromic(const string &C){int len = C.size();for(int i = 0; i < len/2; i++){if(C[i] != C[len - i - 1]) return false;}return true; }string add(const string &A,const string &B){string C;int len = A.size();int carry = 0;for(int i = len - 1; i >= 0; i--){int temp = A[i] - '0' + B[i] - '0' + carry;C += temp % 10 + '0';carry = temp / 10;}if(carry) C += '0' + carry;reverse(C.begin(),C.end());return C; }int main(){string A,B,C;cin >> A;int cnt = 10;if(isPalindromic(A)){cout << A << " is a palindromic number.";return 0;}while(cnt--){B = A;reverse(B.begin(),B.end());C = add(A,B);cout << A << " + " << B << " = " << C << endl;if(isPalindromic(C)) {cout << C << " is a palindromic number.";return 0;}A = C; }cout << "Not found in 10 iterations." << endl;return 0; }
?