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; }

浙公网安备 33010602011771号