1079 延迟的回文数 (20 point(s)) (测试点三、四、五)
这题还算比较容易,就是大整数的加法想了一会,不太熟练。但前面其实有写过一次大整数的加法 1074 宇宙无敌加法器 (20 point(s)) 。
写的时候不太记得是怎么把字符和字符串拼起来的了,所以这里用了一个 (char) 将数字转换成字符类型,写完回去看了看才知道原来当时用了 insert() 函数。
不过当时可能没有很理解题目,当时觉得可能不需要判断简单的回文数,只需要判断题目重点强调的 “延迟回文数” 就可以了。比如条件是这么说 “一行一行输出其变出回文数的过程” 并且标题也是叫做 “延迟回文数” 。但是这样会卡测试点三四五。
而看了别人确定是要判断一下是否是简单的回文数的,这在前面加一个判断就可以了。
下次如果考试时候样例发现没有这回事,卡了测试点,但有些想法的时候应该先试一试。看看是否正确,不然考试没有参考,就算被这种描述整蛊也只能靠自己猜一猜。所以得预先锻炼自己猜的能力。
#include <bits/stdc++.h>
using namespace std;
string add(string A, string B){
int carry = 0;
string C = "";
for(int i = A.size() - 1; i >= 0; i--){
C = (char)((A[i] - '0' + B[i] - '0' + carry) % 10 + '0') + C;
carry = (A[i] - '0' + B[i] - '0' + carry) / 10;
}
// 最后加上进位
if(carry) C = (char)(carry + '0') + C;
return C;
}
int main() {
int step = 10;
string A;
cin >> A;
string B = A;
reverse(begin(B), end(B));
// 直接判断是否是回文数
if(A == B) { cout << A << " is a palindromic number."; return 0;}
while(step--){
string C = add(A, B), D = add(A, B);
reverse(begin(D), end(D));
cout << A << " + " << B << " = " << C << endl;
if(C == D) { cout << C << " is a palindromic number."; return 0;}
// 重新处理
A = C;
B = A;
reverse(begin(B), end(B));
}
cout << "Not found in 10 iterations.";
}
浙公网安备 33010602011771号