zoukankan      html  css  js  c++  java
  • 【PAT甲级】1024 Palindromic Number (25 分)

    题意:

    输入两个正整数N和K(N<=1e10,k<=100),求K次内N和N的反置相加能否得到一个回文数,输出这个数和最小的操作次数。

    trick:

    1e10的数字相加100次可能达到1e40,所以long long会爆,采用字符数组操作,以及代码注释中遇到的一些小问题。

    AAAAAccepted code

     1 #define HAVE_STRUCT_TIMESPEC
     2 #include<bits/stdc++.h>
     3 using namespace std;
     4 char num[107];
     5 char s[107];//这里用string的时候会遇到以下的小问题,查阅资料后发现直接对string原有长度以后的位置赋值不能增加它的长度,建议采用s+=" xxx",的形式可以增加string的长度。
     6 int k;
     7 int main(){
     8     cin>>s>>k;
     9     int tot=k;
    10     int flag=0;
    11     int siz=strlen(s);
    12     while(k--){
    13         memset(num,0,sizeof(num));
    14         int cnt=0;
    15         for(int i=siz-1;i>=0;--i)
    16             num[++cnt]=s[i];
    17         flag=0;
    18         for(int i=1;i<=cnt/2;++i)
    19             if(num[i]!=num[cnt-i+1]){
    20                 flag=1;
    21                 break;
    22             }
    23         if(!flag){
    24             flag=2;
    25             break;
    26         }
    27         string y;
    28         int jinwei=0;
    29         for(int i=cnt;i;--i){
    30             int tt=num[i]+s[i-1]-'0'-'0'+jinwei;
    31             y[i]=tt%10+'0';
    32             jinwei=tt/10;
    33         }
    34         if(jinwei)
    35             y[0]='1';
    36         if(y[0]!=0)
    37             for(int i=0;i<=cnt;++i)
    38                 s[i]=y[i];
    39         else
    40             for(int i=1;i<=cnt;++i)
    41                 s[i-1]=y[i];
    42         if(s[cnt]!=0)
    43             siz=cnt+1;//这里用siz来更新s的长度会在使用string s的时候出现段错误
    44         else
    45             siz=cnt;//这里如果不用siz来更新s的长度会在使用string s的时候s.size()不更新,依然是输入s的时候的size(),不是很懂,在size()-1以后的位置给s赋值,不能更新它的size(),用siz更新也会出现段错误
    46     }
    47     for(int i=0;i<siz;++i)
    48         cout<<s[i];
    49     cout<<endl;
    50     if(flag==2)
    51         cout<<tot-k-1;
    52     else
    53         cout<<tot;
    54     return 0;
    55 }
    保持热爱 不懈努力 不试试看怎么知道会失败呢(划掉) 世上无难事 只要肯放弃(划掉)
  • 相关阅读:
    ado.net 完整修改删除,攻击防攻击
    ado.net 修改,查询
    navicat连接sqlserver未指定默认驱动程序
    设计模式之Proxy(代理)(转)
    设计模式之Prototype(原型)(转)
    设计模式之Observer(观察者)(转)
    设计模式之Memento(备忘机制)(转)
    设计模式之Mediator(中介者)(转)
    设计模式之Interpreter(解释器)(转)
    信步漫谈之Xfire—基础介绍
  • 原文地址:https://www.cnblogs.com/ldudxy/p/11442958.html
Copyright © 2011-2022 走看看