PAT 1024 Palindromic Number

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

简单大数

 

 1 #include <stdio.h>
 2 #include <string.h>
 3 char ori_str[100],trans_str[100];
 4 char temp[100];
 5 int K;
 6 
 7 void trans(char *str)
 8 {
 9     int i=strlen(str);
10 
11     int j;
12     for(j=0;j<i;j++) {
13         trans_str[j]=ori_str[i-1-j];
14     }
15     trans_str[i]='\0';
16 }
17 
18 bool check(char *str)
19 {
20     char t[100];
21     int i=strlen(str);
22     int j=0;
23     for(j=0;j<i;j++) {
24         t[j]=str[i-1-j];
25     }
26     t[i]='\0';
27 
28     return strcmp(str,t)==0;
29 }
30 
31 
32 void calc(char *str1,char *str2)
33 {
34     int i=strlen(str1);
35 
36     int j;
37     int c=0;
38     for(j=0;j<i;j++) {
39         int m=str1[j]-'0'+str2[j]-'0'+c;
40         temp[j]=(m%10)+'0';
41         c=m/10;
42     }
43     if(c) {
44         temp[j]=c+'0';
45     }
46     temp[j+1]='\0';
47 }
48 int main()
49 {
50     scanf("%s%d",ori_str,&K);
51     
52     if(check(ori_str)) {
53 
54         printf("%s\n",ori_str);
55         printf("0\n");
56         return 0;
57 
58     }
59 
60     int i;
61     for(i=1;i<=K;i++) {
62 
63         trans(ori_str);
64         calc(ori_str,trans_str);
65 
66         if(check(temp)) {
67             printf("%s\n",temp);
68             printf("%d\n",i);
69             break;
70         } else if (i==K) {
71         //    printf("%s\n",temp);
72             int j;
73             for(j=strlen(temp)-1;j>=0;j--) {
74                 putchar(temp[j]);
75             }
76             putchar('\n');
77             printf("%d\n",i);
78         }
79         strcpy(ori_str,temp);
80     }
81     return 0;
82 }
posted @ 2012-06-12 16:17  linyvxiang  阅读(282)  评论(0编辑  收藏  举报