分析:写错了,问题出在100次相加,开始认为10的10次方没有问题,实际上累加100次最大数,longlong是不够的,要用大数进行操作(字符串加法)。
注意字符串逆置的问题:
#include <iostream>
#include <string>
using namespace std;int main()
{
string s,s1;cin>>s;s1 = s; //这里一定要有s1=s,如果没有这句话就无法正确的打印。int len=s.length();//reversefor(int i=0;i<len;i++){
s1[len-i-1]=s[i];}cout<<s<<endl;cout<<s1<<endl;return 0;
}
(1)学习一下怎么对string字符串进行操作的,直接s+=“abcd”即可。
(2)学习一下字符串翻转函数reverse()
AC:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int k,sum=0,ans=0,cnt=0;
bool judge(string s){
ll len=s.length();for(ll i=0;i<len;i++){
if(s[i]!=s[len-1-i]) return false;}return true;
}
string adds(string ss1,string ss2){
int len=ss1.length(),jinwei=0;for(int i=len-1;i>=0;i--){
int x=ss1[i]-'0'+ss2[i]-'0';if(jinwei){
x++;jinwei=0;}if(x>9){
jinwei=1;}ss1[i]=x%10+'0';}string sss;if(jinwei==1){
sss="1";sss+=ss1;ss1=sss;}return ss1;
}int main(){
string s1;cin>>s1>>k;while(cnt<k&&!judge(s1)){
cnt++;string s2=s1;reverse(s2.begin(),s2.end());s1=adds(s1,s2);}cout<<s1<<endl;cout<<cnt<<endl;return 0;
}
WA
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll k,sum=0,ans=0,cnt=0;
bool judge(string s){
ll len=s.length();for(ll i=0;i<len;i++){
if(s[i]!=s[len-1-i]) return false;}return true;
}
string adds(string ss1,string ss2){
string ss;int len=ss1.length();int jinwei=0;for(int i=len-1;i>=0;i++){
int tmp=ss1[i]-'0'+ss2[i]-'0';if(jinwei){
tmp++;jinwei=0;}if(tmp>9){
jinwei=1;}ss[i]=tmp%10+'0';}string sss;if(jinwei=1){
sss="1";sss+=ss;ss=sss;}return ss;
}
int main(){
string s1;cin>>s1>>k;while(cnt<k&&!judge(s1)){
cnt++;string s2=s1;reverse(s2.begin(),s2.end());s1=adds(s1,s2);}cout<<s1<<endl;cout<<cnt<<endl;return 0;
}
WA。。。。。。。。。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
string s;
ll k,sum=0,ans=0,cnt=0;
bool flag=false;
int main(){
cin>>s>>k;while(cnt<k){
cnt++;ll len=s.length();ll tmp=0;for(ll i=0;i<len;i++){
tmp=(tmp+s[i]-'0'+s[len-i-1]-'0')*10;}tmp=tmp/10;//判断是否是回文//int len1=getlen(tmp);s="";vector<ll> vv;vv.clear();while(tmp){
vv.push_back(tmp%10);tmp=tmp/10;}ll len1=vv.size();for(ll i=0;i<len1;i++){
s+=(vv[len1-i-1]+'0'); //学习一下字符串如何逆置}//cout<<s<<endl;ll len2=s.length();ll cc=0;for(ll i=0;i<len2;i++){
if(s[i]==s[len2-i-1]){
cc++;}}if(cc==len2) {
flag=true;break;}}cout<<s<<endl;cout<<cnt<<endl;return 0;
}