进制转换-c语言代码实战

#include 
#include 
//进制装换练习
//自定义一个参数和返回值都是整形的pow_int函数,用于计算整数的幂计算,如果使用pow函数在类型转换的过程中可能会遇到10的平方等于99个尴尬情况.
int pow_int(int ,int);
int main()
{
    int scale =0;//接收用户输入数的进制
    int scale2=0;//目标数的进制
    int panduan=0;//判断
    int place=1;//待转换数的位数
    int place2=1;//目标数的位数
    int i=0;//循环变量
    int *dig;//用于接收用户的输入待转换数
    int *dig2;//用于存放转换的n进制数
    int dig10=0;//用于保存转换数的10进制数

//循环体
do{
    system("cls");//清屏
    printf("任意进制转换:\n");//打印说明
    printf("请根据提示逐位输入(第一位为个位)\n");
    printf("**********************************\n");
    printf("请输入要转换数的进制:");
    //接收输入并判断
    do{
        panduan=scanf("%d",&scale);
        if (panduan==0||scale<=1){
            printf("你的输入非法!\a");
            fflush(stdin);
            printf("请重新输入:");
        }
    }while(panduan==0||scale<=1);
    //接收用户输入
    printf("请输入待转换数的位数:");
    //接收输入并判断
    do{
        panduan=scanf("%d",&place);
        if (panduan==0||place<=0){
            printf("你的输入非法,请重新输入:");
            fflush(stdin);
        }
    }while(panduan==0||place<=0);
    //接收待转换数
    printf("请从高位到低位依次输入这个%d进制数:\n",scale);
    //动态分配数组空间
    dig=(int*)malloc(sizeof(int)*place);
    //等价于:dig=(int*)calloc(place,sizeof(int));
    //接收并判断输入是否非法
    for(i=0;ido{
            printf("请输入这个数的第%d位:",place-i);
            panduan=scanf("%d",dig+place-1-i);
            if (panduan==0||*(dig+place-1-i)<0||*(dig+place-1-i)>=scale){
                printf("你的输入非法,请重新输入!\n");
                fflush(stdin);
            }
            }while(panduan==0||*(dig+place-1-i)<0||*(dig+place-1-i)>=scale);
    }
    //输出这个数
    printf("你输入的这个数为:");
    for (i=0;iprintf("<%d> ",*(dig+place-1-i));
    }
    //转换为10进制数
    for(i=0;i1-i]*pow_int(scale,place-1.0-i);
    }
    printf("这个数的10进制数为:%d\n",dig10);
    system("pause");
    //接收用户输入的进制,进行10进制到N进制的转换
    printf("请输入要转换的进制:");
    //接收输入并判断
    do{
        panduan=scanf("%d",&scale2);
        if (panduan==0||scale2<=1){
            printf("你的输入非法,请重新输入:");
            fflush(stdin);
        }
    }while(panduan==0||scale2<=1);
    //判断要转换数的位数
    i=1;
    place2=0;
    if (dig10==0)place2=1;
    else{
        do{
            if(pow_int(scale2,i)-1>dig10){
                place2=i;
            }
            else {
                i++;
            }

        }while(place2==0);
    }
    //动态分配dig2的空间
    dig2=(int*)calloc(place2,sizeof(int));
    //计算
    for(i=0;i1-i);//第place2-i位的值其对应的10进制数的scale2的place-i-1次方
     dig10=dig10-(*(dig2+i))*pow_int(scale2,place2-i-1);//从dig10中减去前一位目标进制数的10进制数
    }
    //输出目标数
    printf("*************************************\n");
    printf("%d进制数:",scale);
        for (i=0;iprintf("<%d> ",*(dig+place-1-i));
        }
    printf("转换后的%d进制数为:\n",scale2);
    for (i=0;iprintf("<%d> ",*(dig2+i));
    }
    printf("\n");
    printf("*************************************\n");
    printf("\n");
    system("pause");
    //内存释放
    free(dig);
    free(dig2);
    i=0;
    printf("是否继续:\n1,是\n2,否\n");
    do{
        panduan=scanf("%d",&i);
        if (i<1||i>2){
            printf("我不明白你在说什么!\n");
            fflush(stdin);
            printf("请输入1或2重新选择:");
        }
    }while(panduan==0);
    printf("\n");
}while(i==1);
    return 0;
}

//自定义函数部分
int pow_int(int a,int b){//计算a 的b次方
    int i=0;
    int powx=1;
    if (a==0){
        return 0;
    }
    else if(b==0){
        return 1;
    }
    else{
        for(i=0;ireturn powx;
}

C语言小白的小程序,请各位大大们指正.程序中为了便于计算以及任意进制的表示,没有采用16进制数的A:10,B:11;C:12;D:13;E:14;F:15的表示方式,而是用尖括号加10进制数的方式表示每一位数.

你可能感兴趣的:(编程,学习,c语言)