1. 程式人生 > 其它 >Dockerfile 構建 Flume 映象

Dockerfile 構建 Flume 映象

迴文數

問題描述 :

如果一個數從左往右讀和從右往左讀都是一樣,那麼這個數就叫做迴文數。例如,12321就是一個迴文數,而77778就不是。當然,迴文數的首和尾都應是非零的,因此0220就不是迴文數。事實上,有一些數(如21),在十進位制時不是迴文數,但在其它進位制(如二進位制時為10101)時就是迴文數。 編一個程式,從檔案讀入兩個十進位制數 N (1<= N <= 15) S (0 <S <10000) 然後找出前N個滿足大於S且在兩種或兩種以上進位制(二進位制至十進位制)上是迴文數的十進位制數,輸出到檔案上。 本問題的解決方案不需要使用大於4位元組的整型變數。

輸入說明 :

只有一行,用空格隔開的兩個數N和S。

輸出說明 :

第一行輸出Case k: k代表第k組測試資料,從1開始遞增
N行, 每行一個滿足上述要求的數,並按從小到大的順序輸出。

輸入範例 :

3 25
輸出範例 :

26
27
28

//第一步:進位制轉換
//寫一個統一的函式將十進位制數轉換成2到10之間的進位制數//
int jzzhishw(int m,int n)//m為要轉換的數,n為要轉換成的進位制
{
int arr[100],i=0,s;
while(m>0)//將轉換的每一位數存入陣列
{
arr[i]=m%n;
m=m/n;
i++
}
//第二步:判斷迴文數
 s=0;
    for(int j=i-1;j>=0;j--)
    {
        s=
s*10+arr[j]; } n=s; int sum=0; while(n) { sum=sum*10+n%10;//將轉換的進位制數反過來 n=n/10; } //判斷進位制數和其反過來是否相等,若相等則是迴文數 if(sum==s)return 1; else return 0; }

結果按從小到大的順序輸出。

int main()
{
int N,S;
int k=1,s,count;//s從輸入的S開始,count計數,輸出N個符合要求的數
int arr[100];//記錄符合要求的十進位制數
while(cin>>
N>>S) {count=0; cout<<"Case "<<k<<":"<<endl; k++; for(s=S+1;;s++) { int sum=0; for(int i=2;i<=10;i++) { //十進位制數S滿足兩種或兩種以上進位制(二進位制至十進位制)上是迴文數 if(function(s,i)==1) {sum++; if(sum==2)//滿足之後即可存入記錄陣列 {arr[count++]=s; break; } } } //只需輸出N個符合要求的數,如果達到了即可退出所有的for迴圈 if(count==N)break; } for(count=0;count<N;count++) { cout<<arr[count]<<endl; } } return 0; }