首页 > 编程语言 > 详细

C语言:进制转化

时间:2021-07-12 22:23:10      阅读:27      评论:0      收藏:0      [点我收藏+]

16进制数4321转10进制:
原来方法 =4*16^3+3*16^2+2*16^1+1*16^0
    =4*16^3+3*16^2+2*16^1+1
    =16*(4*16^2+3*16^1+2)+1
    =16*(16*(4*16^1+3)+2)+1
    =16*(16*(16*(4+0)+3)+2)+1

#include <stdio.h>
#include <math.h>
#define MAXCHAR 101  /*最大允许字符串长度*/
int char_to_num(char ch);  /*返回字符对应的数字*/ 
char num_to_char(int num);  /*返回数字对应的字符*/
long source_to_decimal(char temp[], int source);  /*返回由原数转换成的10进制数*/
long source_to_decimala(char temp[], int source);  /*返回由原数转换成的10进制数*/
int decimal_to_object(char temp[], long decimal_num, int object);  /*返回转换成目标数制后字符数组的长度*/
void output(char temp[], int length);  /*将字符数组逆序打印*/
int main()
{
    int source;  /*存储原数制*/
    int object;   /*存储目标数制*/
    int length;  /*存储转换成目标数制后字符数组的长度*/
    long decimal_num;  /*存储转换成的10进制数*/
    char temp[MAXCHAR];   /*存储待转换的数值和转换后的数值*/
    int flag = 1;  /*存储是否退出程序的标志*/
    while(flag)  /*利用输入的flag值控制循环是否结束*/
    {
        printf("转换前的数是:");
        scanf("%s", temp);
        printf("转换前的数制是:");
        scanf("%d", &source);
        printf("转换后的数制是:");
        scanf("%d", &object);
        printf("转换后的数是:");
        decimal_num = source_to_decimala(temp, source);
        length = decimal_to_object(temp, decimal_num, object);
        output(temp, length);
        printf("继续请输入1,否则输入0:\n");
        scanf("%d", &flag);
    }
    return 0;
}
/*将字符转换成数字*/
int char_to_num(char ch)
{
    if(ch>=0 && ch<=9)
        return ch-0;  /*将数字字符转换成数字*/
    else
        return ch-A+10;  /*将字母字符转换成数字*/
}
char num_to_char(int num)
{
    if(num>=0 && num<=9)
        return (char)(0+num-0);  /*将0~9之间的数字转换成字符*/
    else
        return (char)(A+num-10);  /*将大于10的数字转换成字符*/
}
long source_to_decimal(char temp[], int source)
{
    long decimal_num = 0;  /*存储展开之后的和*/
    int length;
    int i;
    for( i=0; temp[i]!=\0; i++ );
    length=i;
    for( i=0; i<=length-1; i++ )  /*累加*/
       decimal_num = (decimal_num*source) + char_to_num(temp[i]);
    return decimal_num;
}
long source_to_decimala(char temp[], int source)
{
    long decimal_num = 0;  /*存储展开之后的和*/
    int length;
    int i;
    for( i=0; temp[i]!=\0; i++ );
    length=i;
    for( i=0; i<=length-1; i++ )  /*累加*/
        {
        decimal_num = decimal_num + char_to_num(temp[i])*pow(source,length-1-i);
        printf("%d ",temp[i]);
        }
    printf("\n%d\n",decimal_num);
    return decimal_num;
}
int decimal_to_object(char temp[], long decimal_num, int object)
{
    int i=0;
    while(decimal_num)
    {
        temp[i] = num_to_char(decimal_num % object);  /*求出余数并转换为字符*/
        decimal_num = decimal_num / object;  /*用十进制数除以基数*/
        i++;
    }
    temp[i]=\0;
    return i;
}
void output(char temp[], int length)
{
    int i;
    for( i=length-1; i>=0; i--)  /*输出temp数组中的值*/
        printf("%c", temp[i]);
    printf("\n");
}

 

C语言:进制转化

原文:https://www.cnblogs.com/xkdn/p/15003621.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!