• 进制转换问题


    位转换

    16转8

    //16转8 
    #include <stdio.h>
    #include <string.h>
    
    char str[100005], num;
    void Fun(int i, int state) //长度  位数 
    {
        int temp;
        if(i < 0)
        {
            if(num != 0)  //此时的num转二进制后的有效位数小于三位,即num小于8
            {
                printf("%d", num);
            }
            return;
        }
        if(state != 3)
        {
            temp = str[i] >= '0' && str[i] <= '9' ? str[i] - '0' : str[i] - 'A' + 10;
            temp <<= state;  //state指每次将16进制转2进制后,截取最后三位后剩余几位
            num |= temp;     //把二进制的num和二进制的temp相加(等同于十进制之间的加,因为对应num位数的temp的后几位在上一步左移时填补了0)
            temp = num;
            num >>= 3;
            Fun(i - 1, state + 1);
            printf("%d", (temp & 1) + (temp & 2) + (temp & 4));  //相当于将temp转二进制后的最后三位取出并转8进制
        }
        else
        {
            temp = num;
            num >>= 3;
            Fun(i, 0);
            printf("%d", (temp & 1) + (temp & 2) + (temp & 4));
        }
    }
    
    int main()
    {
        int n;
        scanf("%d", &n);
        while(n--)
        {
            num = 0;
            scanf("%s", str); //输入 
            Fun((int)strlen(str) - 1, 0);
            printf("
    ");
        }
        return 0;
    }
    View Code
    10转2转16
    //十进制转2进制 转16进制 
    #include <stdio.h>
    #include <string.h>
     
    int inttoBin(unsigned int num)
    {
        int i;
        unsigned int mask = 0x80000000;
        for(i = 0; i < 32; i++)
        {
            if((num & mask) == mask)
            {
                printf("1");
            }
            
            else
            {
                printf("0");
            }
            num = num << 1;
            
            if((i + 1) % 4 ==0)
            {
                printf(" ");
            }
        }
        
        printf("
    ");
    }
    int inttoox(unsigned int num)
    {
        int i;
        unsigned int temp = num;
        char s[11];
        memset(s,0,sizeof(char));
        
        s[0] = '0';
        s[1] = 'x';
        s[10] = '';
        unsigned int mask = 0x0000000f;
        for(i = 2; i < 10; i++)
        {
            if((temp & mask) > 10)
            {
                s[11-i] = (temp & mask) - 10 + 'a'; 
            }
            else
            {
                s[11-i] = (temp & mask) + '0';
            }
            
            temp = temp << 4;
        }
        
        printf("result = %s
    ",s);
        //printf("result = %s
    ",s);
    }
    int main()
    {
        unsigned int num;
        char s[11];
        
        printf("intput a number
    ");
        scanf("%u",&num);
        
        inttoBin(num);
        inttoox(num);
        return 0;
    }
    View Code

    1.十进制转换成 d进制   <d<=16>  首选栈

    //十进制转换成d进制   用堆解决 
    #include<iostream>
    #include<stack>
    using namespace std;
    void gcd(int n,int d){
        stack<int> s;
        int e;
        while(n!=0){
            e=n%d;
            s.push(e);
            n/=d;
        }
        while(!s.empty()){
            e=s.top();
            s.pop();
            cout<<e;
        }
        return ;
    } 
    int main()
    {
        int num,d;
        while(cin>>num>>d){
            gcd(num,d);
        }
        
    }
    View Code

    2.d进制转换成10进制  首选栈

    #include<iostream>
    #include<stack>
    using namespace std;
    stack<int> s;
    int gcd(int d){
        int e=1,sum,tmp=1;
        e=s.top();
        s.pop();
        sum=e;
        while(!s.empty()){
            e=s.top();
            s.pop();
            tmp*=d;
            sum+=e*tmp;
        }
        return sum;
    } 
    int main()
    {
        int d,e;
        string str;
        while(cin>>str>>d){
            int len=str.length();
            for (int i = s.size(); i > 0; --i) //自己清空栈 
            s.pop();
            cout<<s.size()<<endl;
            for(int i=0;i<len;i++) {
                e=str[i]-'0';
                s.push(e);
            }
            cout<<gcd(d)<<endl;
        }
    }
    View Code

    3. 大数转换  2 8 16进制转换(使用容器map)   待续,,,

  • 相关阅读:
    教你做一个牛逼的DBA(在大数据下)
    分区扫描执行计划分析简介
    远程桌面无法复制粘贴
    测试链接服务器sql 语句
    webservice 测试窗体只能用于来自本地计算机的请求
    win2003浏览器提示是否需要将当前访问的网站添加到自己信任的站点中去
    如何在excel中把汉字转换成拼音
    关于update set from where
    添加链接服务器的代码
    「android」as过滤svn文件
  • 原文地址:https://www.cnblogs.com/helloworld2019/p/10395355.html
Copyright © 2020-2023  润新知