題目鏈接:回文數字[藍橋杯]
時間限制: 1 Sec 記憶體限制: 256 MB
題目描述:
觀察數字:12321,123321 都有一個共同的特征,無論從左到右讀還是從右向左讀,都是相同的,
這樣的數字叫做:回文數字,
本題要求你找到一些5位或6位的十進制數字,滿足如下要求:
該數字的各個數位之和等于輸入的整數,
輸入:
一個正整數 n (10<n<100), 表示要求滿足的數位和,
輸出:
若干行,每行包含一個滿足要求的5位或6位整數,數字按從小到大的順序排列,
如果沒有滿足條件的,輸出:-1
樣例輸入
45
樣例輸出
99999
題意:判斷一個數(10000<=num<=999999)是否為回文數并且數位和等于輸入的數,
思路:遍歷判斷即可,
如何判斷?

上代碼:
int palindrome(int x)
{
int px=0,xx=x; // px:x倒序的結果 xx:記錄x
int ans=0; //ans:數位和結果
while(x)
{
px = px*10+x%10;
ans += x%10;
x /= 10;
}
if(px==xx) // x為回文數
return ans; // 回傳數位和
else
return -1;
}
用px存著倒序的結果,ans存著數位和,并且判斷是否為回文(用px與xx對比),如果是直接回傳數位和,再把回傳的數位和與輸入的數對比,如果相等就證明符合要求,輸出即可,
聰明的你一定看懂了吧?

完整代碼:
#include<bits/stdc++.h>
using namespace std;
int palindrome(int x)
{
int px=0,xx=x; // px:x倒序的結果 xx:記錄x
int ans=0; //ans:數位和結果
while(x)
{
px = px*10+x%10;
ans += x%10;
x /= 10;
}
if(px==xx) // x為回文數
return ans; // 回傳數位和
else
return -1;
}
int main()
{
int n;
while(cin>>n)
{
int flag=0; // 設定一個標記,標記是非有符合條件的回文數
for(int i=10000; i<=999999; i++)
{
if(palindrome(i)==n) // i為回文數并且數位和等于輸入的n
{
flag=1;
cout<<i<<endl;
}
}
if(flag==0)
cout<<-1<<endl;
}
return 0;
}
小可愛們看完別忘了點贊喲,謝謝支持!

加油!
共同努力!
Keafmd
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/116269.html
標籤:AI
