标签:指针 def 跳出循环 leo namespace input print 题目 行操作
44
3
175
181
题解代码:
#include<iostream>
#include<string>
using namespace std;
int main(){
string a;
while(cin>>a){
int len=a.size();
int flag=0;
for(int i=len/2-1;i>=0;i--){
if(a[i]>a[len-i-1]){
flag=1;
break;
}
else if(a[i]<a[len-i-1]){
break;
}
}
if(!flag){
for(int i=(len-1)/2;i>=0;i--){
a[i]++;
if(a[i]>‘9‘){
a[i]=‘0‘;
}
else break;
}
}
if(a[0]==‘0‘){
a[0]=‘1‘;
len++;
a[len/2]=‘0‘;
}
for(int i=0;i<len/2;i++){
printf("%c",a[i]);
}
for(int i=(len-1)/2;i>=0;i--){
printf("%c",a[i]);
}
printf("\n");
}
}
题解思路:
这道题的思路是将该数分为前半部分和后半部分进行比较,具体比较方法为将前半部分从后往前的每一位与后半部分从前往后的每一位进行比较,即定义指针i从len/2-1到0,
a[i]与a[len-i-1]进行比较
定义一个bool型的flag变量
比较分为三种情况:
1.若a[i]>a[len-i-1],则flag=1,跳出循环
2.若a[i]==a[len-i-1],直接continue跳入循环下一阶段
3.若a[i]<a[len-i-1],直接跳出循环
最后判断flag的值,
1.若flag==1,说明后半部分比前半部分小,不进行操作
2.flag==0时,后半部分比前半部分大,需对前半部分的数进行进位操作,用for循环从i从(len-1)/2到0,对a[i]进位,若a[i]++比9大,a[i]赋值为‘0‘,
进入下一循环,知道循环结束或碰到第一个a[i]++后小于等于‘9‘的数
在最后输出前需判断一种特殊情况,即全为‘9‘组成的数,例如9999,需输出10001,在上述操作中,9999前半部分会背赋值为00,这时需将a[0]赋值为‘1‘,
字符串长度len+1,将中位数a[len/2]赋值为0.
最后将a数组前半部分从前往后输出一遍,再从后往前输出一遍即为正确答案。
标签:指针 def 跳出循环 leo namespace input print 题目 行操作
原文地址:https://www.cnblogs.com/cxs070998/p/11161336.html