PAT甲级1024 Palindromic Number (25 分)
Posted ldudxy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PAT甲级1024 Palindromic Number (25 分)相关的知识,希望对你有一定的参考价值。
题意:
输入两个正整数N和K(N<=1e10,k<=100),求K次内N和N的反置相加能否得到一个回文数,输出这个数和最小的操作次数。
trick:
1e10的数字相加100次可能达到1e40,所以long long会爆,采用字符数组操作,以及代码注释中遇到的一些小问题。
代码:
#define HAVE_STRUCT_TIMESPEC
#include<bits/stdc++.h>
using namespace std;
char num[107];
char s[107];//这里用string的时候会遇到以下的小问题,查阅资料后发现直接对string原有长度以后的位置赋值不能增加它的长度,建议采用s+=" xxx",的形式可以增加string的长度。
int k;
int main()
cin>>s>>k;
int tot=k;
int flag=0;
int siz=strlen(s);
while(k--)
memset(num,0,sizeof(num));
int cnt=0;
for(int i=siz-1;i>=0;--i)
num[++cnt]=s[i];
flag=0;
for(int i=1;i<=cnt/2;++i)
if(num[i]!=num[cnt-i+1])
flag=1;
break;
if(!flag)
flag=2;
break;
string y;
int jinwei=0;
for(int i=cnt;i;--i)
int tt=num[i]+s[i-1]-‘0‘-‘0‘+jinwei;
y[i]=tt%10+‘0‘;
jinwei=tt/10;
if(jinwei)
y[0]=‘1‘;
if(y[0]!=0)
for(int i=0;i<=cnt;++i)
s[i]=y[i];
else
for(int i=1;i<=cnt;++i)
s[i-1]=y[i];
if(s[cnt]!=0)
siz=cnt+1;//这里用siz来更新s的长度会在使用string s的时候出现段错误
else
siz=cnt;//这里如果不用siz来更新s的长度会在使用string s的时候s.size()不更新,依然是输入s的时候的size(),不是很懂,在size()-1以后的位置给s赋值,不能更新它的size(),用siz更新也会出现段错误
for(int i=0;i<siz;++i)
cout<<s[i];
cout<<endl;
if(flag==2)
cout<<tot-k-1;
else
cout<<tot;
return 0;
以上是关于PAT甲级1024 Palindromic Number (25 分)的主要内容,如果未能解决你的问题,请参考以下文章
PAT 甲级 1019 General Palindromic Number
PAT甲级——A1019 General Palindromic Number
PAT 甲级 1019 General Palindromic Number (进制转换,vector运用,一开始2个测试点没过)