萌新必遇进制转化问题,任意进制转化
程序员文章站
2022-03-22 21:35:10
...
输入进制:10
输入数字:15
输入进制:16
输出数字:F
此题目其实就是将一个任意进制先转化为十进制,然后将其转化为对应的进制,很多人一开始都是想这如何让计算机计算机直接识别我输入的是几进制,因为有县里嘛,计算机能够自主识别我输入的是八进制或十六进制,比如我在输入的数字前加0,系统就知道我这是八进制,在数字前加0x就能让计算机知道我这是16进制
,但这值是两个特例,要想任意进制转化,还得用数学中的通法化,将通法转化为程序,这就是这个题目的主意吧。
#include<stdio.h>
#include<math.h>
int main()
{
int num = 0, sys, j = 0, i;
char a[100];
scanf("%d", &sys); 说明你输入的数字为几进制;
scanf("%s",&a); 输入你想要转化的数;
while(a[j]!='\0')
{
j++; 计算字符串中有几个数字,此处可用strlen(a)直接求;
}
for(i = 0; i < j; i++)
{
num = num + (a[i] - '0' ) * pow(sys, j - i - 1); 将字符串转化为数字
这是一半代码,主要是将液体个任意进制数转化为十进制,之前我用字符串输入数字,是因为假如我直接输入数字,计算机默认为十进制。那样就无法计算。a[i] - ‘0’, 就是将字符串中的狮子转化为数字,一个一个的提取出来,再用数学的方法将其转化为你说明的进制数。,接下来一般代码就是反转一下这个思想。
int sys1; //说明你想转化成的·进制;
int m = 0;
int remainder[100] //接收余数。求余不就是通法嘛!
scanf("%d“, &sys1);
for(m = 0; m <= 100; m++)
{
remainder[m] = num % sys1;
num = num / sys1;
if(num = 0)
break;
}
for(m; m >= 0; m--) //倒叙输出,转化进制求余就是要倒着输出才是所转化的进制数。
printf("%c", remainder[m] < 10 ? remainder[m] + '0' : remainder[m] + 55);
//将数字转化为字符,并且将大于9的余数以26因为字母输出, 比如10为A 15为F
return 0;
}
本期就是这样,下期再见。
推荐阅读