进制转换

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

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

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

#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;
}
原文地址:https://www.cnblogs.com/Zhoier-Zxy/p/8075664.html