zoukankan      html  css  js  c++  java
  • PAT 甲级 1136 A Delayed Palindrome (20分)

    Consider a positive integer N written in standard notation with k+1 digits ai​​ as ak​​a1​​a0​​ with 0 for all i and ak​​>0. Then N is palindromic if and only if ai​​=aki​​ for all i. Zero is written 0 and is also palindromic by definition.

    Non-palindromic numbers can be paired with palindromic ones via a series of operations. First, the non-palindromic number is reversed and the result is added to the original number. If the result is not a palindromic number, this is repeated until it gives a palindromic number. Such number is called a delayed palindrome. (Quoted from https://en.wikipedia.org/wiki/Palindromic_number )

    Given any positive integer, you are supposed to find its paired palindromic number.

    Input Specification:

    Each input file contains one test case which gives a positive integer no more than 1000 digits.

    Output Specification:

    For each test case, print line by line the process of finding the palindromic number. The format of each line is the following:

    A + B = C

    where A is the original number, B is the reversed A, and C is their sum. A starts being the input number, and this process ends until C becomes a palindromic number -- in this case we print in the last line C is a palindromic number.; or if a palindromic number cannot be found in 10 iterations, print Not found in 10 iterations. instead.

    Sample Input 1:

    97152

    Sample Output 1:

    97152 + 25179 = 122331
    122331 + 133221 = 255552
    255552 is a palindromic number.

    Sample Input 2:

    196

    Sample Output 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.

    【AC】还差最后一个点、查了半个多小时、要1点了、不想找了、暂时就这样吧、想到再改

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 
     4 int main()
     5 {
     6     string s, s2; cin >> s; s2 = s;
     7     reverse(s2.begin(), s2.end());
     8     if(s == s2) { cout << s << " is a palindromic number."; return 0; }
     9     int cnt = 0; string s1 = s;
    10     while(1)
    11     {
    12         int flag1 = 1;
    13         reverse(s1.begin(), s1.end());
    14         int sum = stoi(s) + stoi(s1);
    15         string ss = to_string(sum);
    16         for(int i = 0; i < ss.length()/2; i++)
    17         {
    18             if(ss[i] != ss[ss.length()-i-1]) { flag1 = 0; break; }
    19         }
    20         if(flag1) { cout << s << " + " << s1 << " = " << ss << endl << ss << " is a palindromic number."; return 0; }
    21         cnt++; cout << s << " + " << s1 << " = " << ss << endl;
    22         s = s1 = ss;
    23         if(cnt == 10) { cout << "Not found in 10 iterations."; return 0; }
    24     }
    25     return 0;
    26 }
    View Code

     【柳婼AC代码】

     1 #include <iostream>
     2 #include <algorithm>
     3 using namespace std;
     4 string rev(string s) {
     5     reverse(s.begin(), s.end());
     6     return s;
     7 }
     8 string add(string s1, string s2) {
     9     string s = s1;
    10     int carry = 0;
    11     for (int i = s1.size() - 1; i >= 0; i--) {
    12         s[i] = (s1[i] - '0' + s2[i] - '0' + carry) % 10 + '0';
    13         carry = (s1[i] - '0' + s2[i] - '0' + carry) / 10;
    14     }
    15     if (carry > 0) s = "1" + s;
    16     return s;
    17 }
    18 int main() {
    19     string s, sum;
    20     int n = 10;
    21     cin >> s;
    22     if (s == rev(s)) {
    23         cout << s << " is a palindromic number.
    ";
    24         return 0;
    25     }
    26     while (n--) {
    27         sum = add(s, rev(s));
    28         cout << s << " + " << rev(s) << " = " << sum << endl;
    29         if (sum == rev(sum)) {
    30             cout << sum << " is a palindromic number.
    ";
    31             return 0;
    32         }
    33         s = sum;
    34     }
    35     cout << "Not found in 10 iterations.
    ";
    36     return 0;
    37 }
    View Code

    Tips:reverse( str.begin(), str.end() );  //palindrome重要函数  反转字符串

     

  • 相关阅读:
    Ubuntu 14.04 卸载通过源码安装的库
    Ubuntu 14.04 indigo 相关依赖
    Ubuntu 14.04 indigo 安装 cartographer 1.0.0
    Ubuntu 14.04 改变文件或者文件夹的拥有者
    安装cartographer遇到Unrecognized syntax identifier "proto3". This parser only recognizes "proto2"问题
    Unrecognized syntax identifier "proto3". This parser only recognizes "proto2". ”问题解决方法
    查看所有用户组,用户名
    1卸载ROS
    Ubuntu14.04 软件安装卸载
    Ubuntu14.04系统显示器不自动休眠修改
  • 原文地址:https://www.cnblogs.com/kamisamalz/p/13605319.html
Copyright © 2011-2022 走看看