1136. A Delayed Palindrome (20)

题目:

https://www.patest.cn/contests/pat-a-practise/1136

大概描述:

对字符串数进行回文判断,如果不是在10次转置相加中是否出现进行输出

特征词:

string

使用语言:

C++

解题思想:

主要分为两个部分进行循环和进行转置相加的处理

题目得分:

20

提交次数:

2

时间

64分钟

代码

#include<cstdio>
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
string ss;
string bb;
string kk;
void rever(string ss){
 int num = ss.size();
 int i = 0;
 for(i = 0;i < num;i++){
 bb[i] = ss[num - i -1];
 printf("%c",bb[i]);
 }
 bb[i] = '\0';
 printf("rever number :");
 cout << bb;
}
void addd(string a,string b){
 //printf("进行相加操作:");
 //cout << a << " + " << b;
 //printf("\n");
 int num1 = a.size();
 int i= 0;
 int jin = 0;
 /*for(i = num1 -1;i >= 0;i--){
 if(a[i] - '0' + b[i] - '0' + jin>= 10){
 jin = 1;
 kk[i + 1] = a[i] - '0' + b[i] - '0' + jin - 10 + '0';
 }
 else{
 kk[i + 1] = a[i] - '0' + b[i] - '0' + jin + '0';
 jin = 0;
 }
 }
 if(jin > 0){
 kk[0] = jin + '0';
 }*/
 for(i = 0;i < num1 ;i++){
 if(a[i] - '0' + b[i] - '0' + jin >= 10){
 kk += a[i] + b[i] - '0' + jin - 10;
 jin = 1;
 }
 if(a[i] - '0' + b[i] - '0' + jin < 10){
 kk += a[i] + b[i] - '0' + jin;
 jin = 0;
 }
 }
 if(jin > 0){
 kk += 1 + '0';
 }
 reverse(kk.begin(),kk.end());
 //printf("相加结束结果为");
 ///cout << kk;//是否需要再末尾添加\0
 //printf("\n");
}

int main(){
 cin >> ss;
 int i = 0;
 bb = ss;
 reverse(bb.begin(),bb.end());
 int time = 0;
 while(ss.compare(bb)){
 if(++time > 10)
 break;
 addd(ss,bb);
 cout << ss << " + " << bb << " = " << kk << "\n";
 ss = kk;
 kk.clear();
 bb = ss;
 reverse(bb.begin(),bb.end());
 }
 if(ss.compare(bb) == 0){
 cout << ss << " is a palindromic number.";
 }
 else{
 printf("Not found in 10 iterations.");
 }

}

运行结果

20

 成长

这一题中学习是使用了string 的 reverse的方法,能更加灵活的使用这些函数和符号如“+”,在进行进位相加的处理时,可以从后往前进行累加,在用“ +”进行连接然后进行转置处理

发表评论

电子邮件地址不会被公开。 必填项已用*标注