进制的相互转换

来源:互联网 发布:python安装教程 编辑:程序博客网 时间:2024/06/05 18:15

1.十进制数转换成任意进制(以字符形式输出,不考虑数值)

方法思路:通过数组一位一位的保存需要转化的各位数的下标的值,再倒序输出该位数值。

代码如下:

#include <iostream>#include <cstdio>#include <cstring>using namespace std;int n,m;void fun(int a,int b)  //将十进制数a转换成b进制数(0<b<=16){    char str[]= {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};  //转化成十六进制    int i=0;    int t[50];    if(a<0)    {        a=-a;        printf("-");    }    if(a>0)    {        while(a)        {            t[i]=a%b;  //转换成多少进制就对多少取余,t[x]表示该位在str数组中的下标            a=a/b;     //转换成多少进制就整除多少            i++;        }        while(i--)     //倒序输出        {            printf("%c",str[t[i]]);        }        printf("\n");    }    else        printf("0\n");}int  main(){    while(~scanf("%d %d",&n,&m)&&m>0)    {        printf("10进制数%d转换为%d进制数为:",n,m);        fun(n,m);    }    return 0;}



2.其它进制数转化成十进制数:(还是以字符形式输出,不考虑数值)

思路:与前面十进制数转化成任意进制差不多。这里我多用了一个num数组,其实也可以不用的,直接倒序计算然后将字符形式的数字处理一下(减去‘0’字符就行)变为数值就好,这里我就不写了。

代码如下:

#include <iostream>#include <cstdio>#include <cstring>#include <cmath>using namespace std;int a;char b[20];bool flag;void fun(int a,char b[]){    char str[16]= {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};    int num[50];    long long int s,k;   //s为转换成十进制后的值,为防止原进制和原数过大而定义成long long 型    memset(num,0,sizeof(num));    s=k=0;    printf("%d进制数%s转换成十进制数为:\n",a,b);    if(b[0]=='-')    {        printf("-");    }    int l=strlen(b);    for(int i=l; i>=0; i--)          //将该数各位数值以整型保存在num数组中        for(int j=0; j<a; j++)        {            if(str[j]==b[i])      //与定义的数组匹配,匹配上的该数值就是str数组的下标值            {                num[k++]=j;                break;            }        }    for(int i=0; i<l; i++)        s=s+(num[i]*pow(a,i)); //正常的求任意进制转换成十进制数的公式    printf("%lld\n",s);}int main(){    printf("请输入两个数,第一个代表多少进制,第二个数为需要转换成十进制的数:\n");    while(~scanf("%d",&a)&&a>0&&a<=16)    {        scanf("%s",b);        fun(a,b);    }    return 0;}

0 0
原创粉丝点击