zoukankan      html  css  js  c++  java
  • 进制转换

    都知道计算机用的是二进制,所以你要把计算机处理的速度尽量的加快,所以用二进制来算是最简单的了,因为它符合计算机的语言。

    当然,不排除用正常十进制、八进制、十六进制还有各种怪异的三进制、三十二进制的东西。所以在实现代码的过程中要充分利用二进制的便利,所以要用道进制转换了。

    这个是十进制转换为任意进制:

    #include <iostream>    
    using namespace std;    
    int main()    
    {    
        long n;    
        int p,c,m=0,s[100];       
        cin>>n;     
        cin>>p;        
        while (n!=0)
        {    
            c=n%p;    
            n=n/p;    
            m++;s[m]=c;
        }    
         
        for(int k=m;k>=1;k--)  
        {    
            if(s[k]>=10)
                cout<<(char)(s[k]+55);    
            else
                cout<<s[k];    
        }    
        return 0;    
    }    

    说白了就是自己模拟进制的过程,所以看代码吧!

    然后还有一个任意进制转换成十进制:

    #include<iostream>
    #include<string>
    using namespace std;
    inline int transform(char c)
    {
        if(c>='0'&&c<='9')
            return c-'0';
        else
            return c-'A'+10;
    }
    int main()
    {
        int n,l,ans=0;
        string str;
        cin>>n>>str;
        l=str.length();
        for(int i=0;i<l;i++)
        {
            ans*=n;
            ans+=transform(str[i]);
        }
        cout<<ans;
        return 0;
    }

    当然,如果能像网页上的那种计算器就好了,能把任意进制转换成任意进制。

    其实想想也就出来了,很简单。

    但是这里的输入输出的格式令人费解,但是标程只要两个char来存放就可以(我怎么没想到呢???),以至于用了一个十分 ** 的方法来解决这个问题:

    题目描述
    设字符串A$的结构为: A$='mp'
    其中m 为数字串(长度<=20),而n,p 均为1 或2 位的数字串(其中所表达的内
    容在2-10 之间)。
    程序要求:从键盘上读入A$后(不用正确性检查),将A$中的数字串m(n 进制)
    以p 进制的形式输出。
    输入(diji.in)
    从键盘上读入A$后(不用正确性检查),将A$中的数字串m(n 进制)以p 进制的
    形式输出。
    输出(digi.out)
    将10 进制数48,转换为8 进制数输出
    样例输入
    48<10>8
    样例输出
    48<10>=60<8>
    提示
    m<=20,
    2<=n,p<=20;

    #include <cstdio>
    #include <cstring>
    #include <cstdlib>
    #include <iostream>
    #include <algorithm>
    #include <cmath>
    #include <string>
    using namespace std;
    char n[10086];
    int k,m,mp,c[2333],b[2333],tmp,a;
    char cc[]= {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G'};
    int main()
    {
        freopen("digi.in","r",stdin);
        freopen("digi.out","w",stdout);
        char n[10086];
        int m;
        int sum = 0;
        char ul[10],ur[10];
        for(int i = 0 ; ; i++)
        {
            scanf("%c",&n[i]);
            if(n[i] == '<')
                break;
        }
        /*for(int i = 0 ; ; i++)
        {
          scanf("%c",&ul[i]);
          if(ul[i] == '<')
          }*/
        //scanf("%s",n);
        scanf ("%d",&m);
        //cin>>ur;
        /*for(int i = 0 ; i <= strlen(n) ; i++)
          printf("%c",n[i]);*/
        for(int i = 0 ; ; i++)
        {
            scanf("%c",&ur[i]);
            if(ur[i] == '>')
                break;
        }
        //printf("%d
    ",m);
        for(int i = 0 ; i < strlen(n) - 1; i++)
        {
            if(n[i] <= '9' && n[i] >= '0')
                sum = sum * m + (n[i] - '0');
            else
                sum = sum * m + (n[i] - 'A' + 10);
        }
        scanf ("%d",&mp);
        while (sum != 0)
        {
            c[++a] = sum % mp;
            sum = sum / mp;
        }
        for(int i = 0 ; i < strlen(n) - 1; i++)
            printf("%c",n[i]);
        cout<<'<'<<m<<'>'<<'=';
        for (int i = a ; i >= 1 ; i--)
            printf ("%c",cc[c[i]]);
        cout<<'<'<<mp<<'>';
        return 0;
    }
  • 相关阅读:
    P1351 联合权值
    c++ 贪心讲解大礼包
    取石子 找规律
    树 dfs暴力判环 题意转化
    P2519 [HAOI2011]problem a
    P1640 [SCOI2010]连续攻击游戏 二分图最大匹配 匈牙利算法
    P2756 飞行员配对方案问题 二分图匹配 匈牙利算法
    cogs 49. 跳马问题 DFS dp
    cogs 2. 旅行计划 dijkstra+打印路径小技巧
    cogs 1440. [NOIP2013]积木大赛 贪心水题
  • 原文地址:https://www.cnblogs.com/Zhoier-Zxy/p/8075664.html
Copyright © 2011-2022 走看看