题目:PAT A 1019
题目大意
给出一个10进制的小数N
,和一个基数b
。问N
在b
进制下是不是回文数字。
解题思路
- 把10进制的数,抓换为
b
进制。因为N
是浮点数,所以,需要划分为整数部分和小数部分 - 整数部分,除
b
取余。注意逆序一下 - 小数部分,乘
b
取整,注意顺序不变。
#include<bits/stdc++.h>
using namespace std;
int main(){
double N;
int b;
while(cin>>N>>b){
int interger=int(N);
double decimal=N-interger;
vector<int>digit;
if(interger==0) digit.push_back(0);
else{
while(interger){
digit.push_back(interger%b);
interger/=b;
}
}
reverse(digit.begin(),digit.end());
while(decimal>0.0){
decimal=decimal*b;
digit.push_back(int(decimal));
decimal=decimal-int(decimal);
}
bool f=true;
int i=0,j=digit.size()-1;
while(i<=j){
if(digit[i]!=digit[j]){
f=false;
break;
}
i++,j--;
}
if(f) printf("Yes\n");
else printf("No\n");
for(int i=0;i<digit.size();++i){
if(i==0) printf("%d",digit[i]);
else printf(" %d",digit[i]);
}
printf("\n");
}
system("pause");
return 0;
}