題目連結:迴文數位[藍橋杯]
時間限制: 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