数据结构实践项目--------进制转换器

 


#include <stdio.h>
#include <string.h>
#include <math.h>
int top=-1; //top 变量时刻表示栈顶元素所在位置
void push(char* a,char elem)
{
    a[++top]=elem;
}
void pop(char* a)
{
    if(top==-1)
    {
        return;
    }

    //输出时要按照正确的格式显示给用户
    if (a[top]>=10)
    {
        printf("%c",a[top]+55);
    }
    else{
        printf("%d",a[top]);

    }
    top--;
}


//将各进制数转换成十进制数
int scaleFun(char* data,int system)
{
    int k=(int)strlen(data)-1;
    int system_10_data=0;
    int i;
    for(i=k;i>=0;i--)
    {
        int temp;

        //字符转数字
        if(data[i]>=48 && data[i]<=57)
        {
            temp=data[i]-48;
        }
        else
        {
            temp=data[i]-55;
        }

        //按权相加获得10进制 
        system_10_data+=temp*pow(system,k-i);
    }
    return system_10_data;
}

int main()
{
    char data[100];
    printf("进制转换器,请输入原数据的进制(2-36):");
    int system;
    scanf("%d",&system);
    getchar();      //清除回车符
    printf("请输入要转换的数据:");
    scanf("%s",data);
    getchar();
    int system_10_data=scaleFun(data,system);
    printf("请输入转换后的数据的进制:");
    int newSystem;
    scanf("%d",&newSystem);
    getchar();

/*十进制整数转换为 N 进制整数采用“除 N 取余,逆序排列”法。具体做法是:
将 N 作为除数,用十进制整数除以 N,可以得到一个商和余数;
保留余数,用商继续除以 N,又得到一个新的商和余数;
仍然保留余数,用商继续除以 N,还会得到一个新的商和余数;
把先得到的余数作为 N 进制数的低位数字,后得到的余数作为 N 进制数的高位数字,
依次排列起来,就得到了 N 进制数字。*/

    while(system_10_data/newSystem)
    {
        push(data,system_10_data%newSystem);
            system_10_data/=newSystem;
    }
    push(data,system_10_data%newSystem);

    printf("转换后的结果为:\n");
    while(top!=-1)
    {
        pop(data);
    }
    printf("\n");

}
root@book-virtual-machine:/mnt/hgfs/lua/C++# g++  -std=c++11 salman_0119.cpp -o salman_0119
root@book-virtual-machine:/mnt/hgfs/lua/C++# ./salman_0119
进制转换器,请输入原数据的进制(2-36):10
请输入要转换的数据:100
top==-1请输入转换后的数据的进制:

猜你喜欢

转载自blog.csdn.net/aa804738534/article/details/113745705