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.";
}

posted on 2021-09-15 23:58  Atl212  阅读(130)  评论(0)    收藏  举报

导航