目录
前言
进制转换问题非常常见,刚好羊最近认真总结了,一起来看看吧。🚗🚓🚕🛺
一、10进制转化为m进制
思路:
1、对十进制数连续进行:取余m,然后除以m;
2、把每次取余结果存在数组中,记录取余次数
3、倒序输出
代码实现:
#include<stdio.h>
int main()
{
int x,m;
scanf("%d %d",&x,&m);
int a[50],cnt=0;
do{
a[cnt++]=x%m;
x/=m;
}while(x!=0);
for(int i=cnt-1;i>=0;i--)
printf("%d",a[i]);
return 0;
}
二、n进制数转化为10进制
思路:
1、把n进制数x的每一位取出来
2、从个位数开始i=0,用个位数乘以n的i次方,i++;用下一位乘以n的i次方;以此类推;
3、把每次结果加到sum上
4、输出sum
例如,将八进制数字 53627 转换成十进制:
53627 = 5×8^4 + 3×8^3 + 6×8^2 + 2×8^1 + 7×8^0 = 22423(十进制)
代码实现:
#include<stdio.h>
#include<math.h>
int main()
{
int x,n,t,p,i=0,sum=0;
scanf("%d%d",&n,&x);//n进制转化为10进制
do{
t=x%10;
p=pow(n,i);
sum+=t*p;
i++;
x=x/10;
}while(x);
printf("%d\n",sum);
return 0;
}
三、任意进制转化
代码实现:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int TenNum(char a[],int B); //将输入的数字转换成10进制数
void Numchange(int m, int B); //将转换好了的10进制数转换为所需进制数
int TenNum(char a[], int B)
{
int len, i, num;
int sum = 0;
len = strlen(a); //求得字符串长度
for (i = 0; i < len; i++)
{
if (a[i] >= '0' && a[i] <= '9')
num = a[i] - '0';
else if (a[i] >= 'A' && a[i] <= 'F')
num = a[i] - 'A' + 10;
sum = sum * B + num;
}
return sum;
}
void Numchange(int m, int B)
{
int n;
if (m)
{
Numchange(m / B, B);
n = m % B;
if (n < 10)
printf("%d", n); //小于10直接输出
else
printf("%c", n + 55); //大于10转换成字符输出
}
}
int main()
{
int B, b;
char a[20];
printf("请输入待转换数的进制(2-16):");
do {
scanf("%d", &B);
} while (B < 2 && B > 16);
printf("请输入待转换数:");
getchar();
gets(a); //将输入的n进制数存放在数组a中
int m = TenNum(a, B); //将输入的数字转换成十进制数
printf("请输入需要转成几进制数(2-16):");
do {
scanf("%d", &b);
} while (B < 2 && B > 16);
printf("%d进制数%s转换为%d进制数的结果为:",B,a,b);
Numchange(m, b); //将十进制数转换为所需进制数
printf("\n");
system("pause");
return 0;
}