Content
把一個數字反轉並相加的方法很簡單:就是把數字反轉並加上原來的數字。假如這個和不是一個迴文(指這個數字從左到右和從右到左都相同),就一直重複這個程序。舉例說明:
195 開始的數字
591
-----
786
687
-----
1473
3741
-----
5214
4125
-----
9339 迴文出現了
在這個例子中,經過了4次相加後得到了迴文9339。幾乎對所有的整數這個方法都會得到迴文,但是也有有趣的例外。196是第1個用這個方法找不到迴文的數字,然而並沒有證明該迴文不存在。
現在給你一個開始的數字,你的任務就是求出經過多少次相加後,會產生哪一個迴文。對所有的測試資料,你可以假設:1. 都會有1個答案。2. 在1000個相加內都會得到答案。 3. 產生的迴文不會大於4294967295.
Input
第1列有一個整數N(0 < N <= 100),代表以下有幾組測試資料。每筆測試資料一列,各有1個整數 P,就是開始的數字。
Output
對每一測試資料,請輸出2個數字:得到迴文所需的最少次數的相加,以及該迴文。
Sample Input #1
5 195 265 750 2 99
Sample Output #1
4 9339 5 45254 3 6666 1 4 6 79497
C++
#include <iostream>
#include <algorithm>
using namespace std;
bool solve(long long int &p){ //p=195 C++寫引數一定要用指標歐!!!,不然裡面做完的動作面又會還原
string s=to_string(p); //s="195"
reverse(s.begin(),s.end()); //s="591"
long long int reverse_p=stoll(s); //reverse_p=591
p+=reverse_p; //p=195+591
s=to_string(p);
for (int i = 0,j=s.size()-1;i<=j; i++,j--)
{
if (s[i]!=s[j]){return false;}
}
return true;
}
int main() {
int t;
cin>>t;
while (t--)
{
long long int p;
cin>>p;
int ans=1; //計算翻轉次數
//例如2進次翻轉相加後為4,他就不會進去while條件裡面,但他翻轉次數是1,所以初始設為1
while (solve(p)==false){ans++;}
cout<<ans<<" "<<p<<"\n";
}
return 0;
}
python:
N = int(input())
for _ in range(N):
n=int(input())
ans=0
flag=False
while flag==False:
ans+=1
reverse_n=int(str(n)[::-1])
p=reverse_n+n
reverse_p=int(str(p)[::-1])
n=p #準備下一次
if p==reverse_p:flag=True
else:flag=False
print(ans,p)
文章標籤
全站熱搜

98787878
簡單啦
*來逛逛**分**享**一**下**收到的圖po在我的部落格中** 賣家幫 網賺 每日不用10分鐘,前15日簽到送代用券(下單,無商品,僅賺紅利),100紅利轉現金45(滿500提領,一周一次免手續費,24小時入帳);另有商品殺價到0元帶回家(4/28~目前已拿到上萬元的商品卡,雖然花的差不多了,哈哈) 邀請連結:(有興趣就試試吧!別跟錢過不去) https://www.mshop.com.tw/app_down.html?go_url=https://mjb.onelink.me/tCkh/34727d4f 最新進度:目前在途的第25次殺價10/8成功「家樂福即享券」500 元預計2周內到貨及第26次殺價10/11成功「7-11」1000元商品卡,10/12居然就入帳了,若沒儲一個月大概賺500~1000,不無小補(滿500每周可免手續費提領) Ps:自從有了賣家幫的殺價後,拿到不少商品卡,以前到7-11買東西還要想很久(貴啊!),現在只要喜歡隨便買,哇哈哈