c++进制转换(用栈和队列实现



**输入**

第一行输入一个t,表示下面将有t组测试数据。

接下来每行包含两个参数n和k,n表示要转换的数值,可能是非整数;k表示要转换的数制,1<k<=16
(输出结果保留三位小数,如要修改小数点保留位数,后面有标出修改的位置


#include

#include

#include

using namespace std;
int main() {

   
double n,decimal;

   
int k,intenger,i,temp;

   
int t;

   
char ch;

 

   
cin>>t;

   
while(t--){

       
stack <char> s;

       
queue<char> que;

 

       
cin>>n>>k;

       
intenger=(int)n;   //获得整数部分

       
decimal=n-intenger; //获得小数部分

 

       
while(intenger){   //处理整数部分

           
temp=intenger%k;

           
if(temp>=10&&k>10) 
//注意不同进制的处理

                ch=temp-10+'A';

           
else

                ch=temp+'0';

           
s.push(ch);

           
intenger=intenger/k;

       
}

 

       
i=0;

       
while(i<3 && decimal!=0){ 
//处理小数部分,i控制小数位数为3位

 //此处修改i的值可修改保留位数

           
temp=(int)(decimal*k);

           
if(temp>=10&&k>10)

                ch=temp-10+'A';

           
else

                ch=temp+'0';

           
que.push(ch);

           
decimal=decimal*k-temp;

           
i++;

       
}

       
for(int j=3-i;j>0;j--)  //若小数点后不足3位,补0

 //此处修改j的值可修改保留位数

           
que.push('0');

 

       
while(!s.empty()){   //输出整数部分

           
cout<<s.top();

            s.pop();

       
}

       
cout<<".";

       
while(!que.empty()){  //输出小数部分

           
cout<<que.front();

           
que.pop();

       
}

       
cout<<endl;

    }

   
return 0;

}

你可能感兴趣的:(c++编程相关,c++)