問題描述
123321是一個非常特殊的數,它從左邊讀和從右邊讀是一樣的。
輸入一個正整數n, 程式設計求所有這樣的五位和六位十進制數,滿足各位數字之和等于n 。
輸入格式
輸入一行,包含一個正整數n。
輸出格式
按從小到大的順序輸出滿足條件的整數,每個整數占一行。
樣例輸入
52
樣例輸出
899998
989989
998899
資料規模和約定
1<=n<=54
思路分析:
-
就在上一題求回文數的基礎上判斷各位上的數字和是否為n
隻需要修改下judge函數,在取數字時每取出一個計算一下目前數字的和,記錄在sum變量中。
-
這個函數我沒有再用flag做标記了,而是做二次判斷。
第一次:
當sum!=n時,直接return false;
第二次:
開始判斷是否為回文數時,p[j]!=p[i-j-1]即可return false;
這個函數就完成了。
代碼如下:
#include<iostream>
using namespace std;
bool judge(long long x,int n){
int p[9];//将一個數中的數字分别提取出來存入數組
int i=0;
int sum=0;
//将數字都提取出來
while(x){
p[i++]=x%10;
sum+=x%10;
x/=10;
}
if(sum!=n){
return false;
}
//判斷是否為回文數,這時的i已經記錄了p數組的長度
for(int j=0;j<i/2;j++){
if(p[j]!=p[i-j-1]){
return false;
break;
}
}
}
int main(){
int n;
cin>>n;
for(long long x=10000;x<1000000;x++)
{
if(judge(x,n)){
printf("%d\n",x);
}
}
return 0;
}