俊介三

一天更新一点,一天积累一点

导航

PAT-1024

Posted on 2013-03-08 11:54  俊介三在前进  阅读(171)  评论(0)    收藏  举报

1024. Palindromic Number (25)

http://pat.zju.edu.cn/contests/pat-a-practise/1024

题目大意:给数N和K,求N和它的反转的和是否对称,在K步之内是否能达到。

注意的地方:

1.C++中,在函数中声明的数组,返回函数后,这些局部变量都释放了。

如果不想释放,可以new一个。int* a = new int[10];然后把a这个地址返回,就能继续正常访问这个在函数中创建的数组

2.题目中“where N (<= 1010) is the initial numer”,就不要用int N;来声明变量,浪费时间。

View Code
#include <stdio.h>
#include <string.h>

bool is_reverse(char* num){
    int i;
    int len = strlen(num);
    for(i=0;i<len/2;i++){
        if(num[i]!=num[len-1-i]) return false;
    }
    return true;
}

char* reverse(char* num){
    char* temp = new char[100];
    int result[200];
    int i=0;
    int len = strlen(num);
    int add=0;
    for(i=0;i<len;i++){
        int temp = num[i]+num[len-i-1]-'0'-'0';
        result[i] = (temp+add)%10;
        add = (temp+add)/10;
    }

    if(add==1){
        
        for(i=1;i<=len;i++){
            temp[i] = result[len-i]+'0';
        }
        temp[0]='1';
        temp[len+1]='\0';
    }else{
        
        for(i=0;i<len;i++){
            temp[i]=result[len-i-1]+'0';
        }
        temp[len]='\0';
    }
    return temp;
}

int main(){
    char N[100];
    int K;
    scanf("%s %d",N,&K);
    
    if(is_reverse(N)){
        printf("%s\n0\n",N);
        return 0;
    }
    int i;
    char* ptr;
    ptr = N;
    for(i=1;i<=K;i++){
        ptr = reverse(ptr);
        if(is_reverse(ptr)){
            printf("%s\n%d\n",ptr,i);
            return 0;
        }
    }
    printf("%s\n%d\n",ptr,K);
    return 0;
}