UVA 10018

http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=24&page=show_problem&problem=959

输入一个整数,如果不是回文数,就倒序成另一个数,然后加到原来的数里面,知道出现回文数,输出步骤数及第一个出现的回文数

View Code
 1 #include<stdio.h>
 2 #include<string.h>
 3 int rev(char *s)//这个函数判断字符串是否符合条件
 4 {
 5  char ss[100000];
 6  int i,flag=0;
 7  strcpy(ss,s);
 8  for(i=0;i<strlen(s);i++)
 9      if(s[i]!=ss[strlen(s)-i-1])
10         {
11          flag=1;
12          break;
13         }
14  if(flag)
15     return 1;
16  else return 0;
17 }
18 int main()
19 {
20  int i,j,n,len,js;
21  char str1[100000],str2[100000];
22  while(scanf("%d",&n)!=EOF)
23       {
24        while(n--)
25            {
26             scanf("%s",str1);
27             js=0;
28             while(rev(str1))
29                 {
30                  js++;
31                  len=strlen(str1);
32                  strcpy(str2,str1);
33                  for(i=0;i<len;i++)
34                     str2[i]+=str1[len-i-1]-'0';//复制一个之后倒序相加得到下一个
35                  for(i=0;i<len-1;i++)
36                     if(str2[i]>'9')
37                        {
38                         str2[i+1]++;
39                         str2[i]-=10;
40                        }
41                  if(str2[i]>'9')
42                       {
43                        str2[len]='1';
44                        str2[len+1]='\0';
45                        str2[i]-=10;
46                       }//以上的是判断进位
47                  strcpy(str1,str2);//复制过去可以用于判断循环是否继续
48                 }
49             printf("%d %s\n",js,str1);
50            }
51       }
52 }

 

posted @ 2013-02-19 10:09  执着追求的IT小小鸟  阅读(83)  评论(0编辑  收藏  举报