Posted on 2012-09-13 15:10
hoshelly 閱讀(302)
評論(0) 編輯 收藏 引用 所屬分類:
Programming
Description
對于任意十進(jìn)制數(shù)轉(zhuǎn)換為k進(jìn)制,包括整數(shù)部分和小數(shù)部分轉(zhuǎn)換。整數(shù)部分采用除k求余法,小數(shù)部分采用乘k取整法例如x=19.125,求2進(jìn)制轉(zhuǎn)換
整數(shù)部分19, 小數(shù)部分0.125
19 / 2 = 9 … 1 0.125 * 2 = 0.25 … 0
9 / 2 = 4 … 1 0.25 * 2 = 0.5 … 0
4 / 2 = 2 … 0 0.5 * 2 = 1 … 1
2 / 2 = 1 … 0
1 / 2 = 0 … 1
所以整數(shù)部分轉(zhuǎn)為 10011,小數(shù)部分轉(zhuǎn)為0.001,合起來為10011.001 請用堆棧實現(xiàn)上述數(shù)制轉(zhuǎn)換
Input
第一行輸入一個t,表示下面將有t組測試數(shù)據(jù)。
接下來的t行的每行包含兩個參數(shù)n(0<n<10000,且最多有8位小數(shù))和k(1<k<=16),n表示要轉(zhuǎn)換的數(shù)值,n可以帶小數(shù)(也可以不帶!),k表示要轉(zhuǎn)換的數(shù)制,k必須是正整數(shù)。大于10的進(jìn)制數(shù)據(jù)用A\B\C\D\E\F表示
Output
對于每一組測試數(shù)據(jù),每行輸出轉(zhuǎn)換后的結(jié)果,小數(shù)部分大于8位的,只輸出前8位小數(shù)
Sample Input
2
19.125 2
15.125 16
Sample Output
10011.001
F.2
代碼
#include<iostream>
#include<stack>
using namespace std;
int main()
{
stack<int> mystack;
int t,m,k;
double b,a;
cin>>t;
while(t--)
{
int c,x[100],d=0,i=0,count=0;
cin>>b>>k;
m=b;
a=b-m;
while(m)
{
c=m%k;
m=m/k;
mystack.push(c);
}
while(1)
{
d=a*k;
if(d>=k)
break;
a=a*k;
x[i++]=d;
count++;
}
while(!mystack.empty())
{
if(mystack.top()<10)
{
cout<<mystack.top();
mystack.pop();
}
else
{
switch(mystack.top())
{
case 10: cout<<"A"; mystack.pop(); break;
case 11: cout<<"B"; mystack.pop(); break;
case 12: cout<<"C"; mystack.pop(); break;
case 13: cout<<"D"; mystack.pop(); break;
case 14: cout<<"E"; mystack.pop(); break;
case 15: cout<<"F"; mystack.pop(); break;
}
}
}
cout<<".";
for(i=0;i<count;i++)
cout<<x[i];
cout<<endl;
}
return 0;
}