程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 合工大OJ 1331 回文數,oj1331

合工大OJ 1331 回文數,oj1331

編輯:C++入門知識

合工大OJ 1331 回文數,oj1331


Description

 

一個正整數,如果從左向右讀(稱之為正序數)和從右向左讀(稱之為倒序數)是一樣的,這樣的數就叫回文數。

任取一個正整數,如果不是回文數,將該數與他的倒序數相加,若其和不是回文數,則重復上述步驟,一直到獲得回文數為止。

例如:

68變成154(68+86),再變成605(154+451),最後變成1111(605+506),而1111是回文數。

於是有數學家提出一個猜想:

不論開始是什麼正整數,在經過有限次正序數和倒序數相加的步驟後,都會得到一個回文數。至今為止還不知道這個猜想是對還是錯。

現在請你編程序驗證之。

 

Input

 

每行一個正整數。

 

 

Output

 

對應每個輸入,輸出一行為變換的過程。

 

 

Sample Input

 

27228
37649

 

Sample Output

 

27228--->109500--->115401--->219912
37649--->132322--->355553

 

Hint

 

1.輸入的數據保證小於2^60
2.每組數據保證最多運算100次
友情提示:WA的同學請仔細閱讀提示1和提示2     簡單題解:看到提示,就直接用字符串處理大數加法,直接AC      
 1 #include<iostream>
 2 #include<string>
 3 using namespace std;
 4 
 5 bool ishuiwen(string s)
 6 {
 7     for(int i=0;i<s.length()/2;i++)
 8     {
 9         if(s[i]!=s[s.length()-1-i])
10             return 0;
11     }
12     return 1;
13 }
14 
15 string Add(string s)
16 {
17     string sum,x;
18     for(int i=0;i<s.length();i++)
19         x[i]=s[s.length()-i-1];
20     int len=s.length();
21     int *a=new int[len+1];
22     a[0]=0;
23     int d=0;
24     for(int i=s.length();i>=1;i--)//從最低位開始計算兩個數各位的和,保存到結果數組 
25         a[i]=s[i-1]+x[i-1]-'0'-'0';//a[1]為計算後結果的最高位,進位情況還未處理 
26     for(int i=s.length();i>=0;i--)//處理進位情況 
27     {
28         a[i]+=d;//本位加上上一位的進位 
29         if(a[i]>=10)//當該位大於等於10時,只保留該位的個位 ,向下一位的進位d為十位 
30         {
31             d=a[i]/10;
32             a[i]%=10;
33         }
34         else if(a[i]<10)//當該位小於10是,向高位的進位為0 
35             d=0;
36     }
37     if(a[0]>0)
38         for(int i=0;i<s.length()+1;i++)
39             sum+=a[i]+'0';
40     else
41         for(int i=0;i<s.length();i++)
42             sum+=a[i+1]+'0';
43     return sum;
44 }
45 
46 int main()
47 {
48     string s;
49     while(cin>>s)
50     {
51         cout<<s;
52         while(!ishuiwen(s))
53         {
54             s=Add(s);
55             cout<<"--->"<<s;
56         }
57         cout<<endl;
58     }
59     return 0;
60 }

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved