进制转换

问题分析:

给定一个M进制的数x,实现对x向任意的一个非M进制的数转换
代码如下:


#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#define MAXCHAR 101
//字符转换为数字
int char_to_num(char ch);
//数字转换为字符
char num_to_char(int num);
//其它进制转换为十进制
long source_to_decimal(char temp[], int source);
//十进制转换为其他进制
int decimal_to_object(char temp[], long decimal, int object);
//转换后新数输出
void output(char temp[], int length);

void main()
{
    int source;
    int object;
    int length;
    long decimal_num;
    char temp[MAXCHAR];
    int flag = 1;
    while (flag)
    {
        printf("转换前的数是:");
        scanf("%s", temp);
        printf("转换前的数制是:");
        scanf("%d", &source);
        printf("转换后的数制是:");
        scanf("%d", &object);
        printf("转换后的数是:");
        decimal_num = source_to_decimal(temp, source);
        length = decimal_to_object(temp, decimal_num, object);
        output(temp, length);
        printf("继续请输入1,否则输入0:\n;");
        scanf("%d", &flag);
    }
}

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);
    else
        return (char)('A' + num - 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;
}

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--)
        printf("%c", temp[i]);
    printf("\n");
}

image

posted @ 2023-04-26 19:54  笠大  阅读(20)  评论(0)    收藏  举报