Dockerfile 構建 Flume 映象
阿新 • • 發佈:2021-01-05
迴文數
問題描述 :
如果一個數從左往右讀和從右往左讀都是一樣,那麼這個數就叫做迴文數。例如,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;
}