• 数制转换


    Description
     
    对于任意十进制数转换为k进制,包括整数部分和小数部分转换。整数部分采用除k求余法,小数部分采用乘k取整法例如x=19.125,求2进制转换
     
    整数部分19,小数部分0.125
    19 / 2 = 9 … 10.125 * 2 = 0.25 … 0
    9 / 2 = 4 … 10.25 * 2 = 0.5   … 0
    4 / 2 = 2 … 0 0.5 * 2 = 1     … 1
    2 / 2 = 1 … 0
    1 / 2 = 0 … 1
    所以整数部分转为 10011,小数部分转为0.001,合起来为10011.001 请用堆栈实现上述数制转换
     
    Input
     
    第一行输入一个t,表示下面将有t组测试数据。
     
    接下来的t行的每行包含两个参数n(0<n<10000,且最多有8位小数)和k(1<k<=16),n表示要转换的数值,n可以带小数(也可以不带!),k表示要转换的数制,k必须是正整数。大于10的进制数据用A\B\C\D\E\F表示
     
    Output
     
    对于每一组测试数据,每行输出转换后的结果,小数部分大于8位的,只输出前8位小数
     
    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;
    }
    
  • 相关阅读:
    P4149 [IOI2011]Race dsu on tree
    CodeForces
    2020牛客国庆集训派对day2 CHEAP DELIVERIES
    Hero In Maze
    topo排序
    今年暑假不AC
    小国的游戏
    Stall Reservations
    博弈论
    Reversed Words
  • 原文地址:https://www.cnblogs.com/suiyun/p/2693532.html
Copyright © 2020-2023  润新知