在前面的一篇文章中,蓝桥杯2017真题——日期问题,涉及到了一个非常基础的问题:禁止的转化,为了强化对于进制转化的理解,专门对于进制转化问题做了一次编程的实现。首先了解进制转化的机制:
十进制转N进制:除N取余倒计
N进制转十进制:依次乘N的n-1次方再相加
如:二进制10101转十进制:12^0 + 02^1 + 12^2 + 02^3 + 1*2^4 = 21
#include<stdio.h>
#include<math.h>
void TenToN(int num,int n)//十进制转其他:除n取余倒排
{
int result1[32], i=0;
while (num>0)
{
result1[i] = num % n;
num /= n;
i++;
}
for (i--; i >= 0; i--)
{
printf("%d", result1[i]);
}
}
void NToTen(int num,int n)//其他转十进制:乘权相加
{
int result2=0, i = 0, m;
while (num!=0)
{
m = num % 10;
num /= 10;
result2 += m * pow(n, i);
i++;
}
printf("%d", result2);
}
int main()
{
int num, n,sw;
printf("请输入你要转化的初始进制数\n");
scanf("%d", &sw);
if (sw==10)//十进制转其他
{
printf("请输入数据和目标进制数\n");
scanf("%d%d", &num, &n);
TenToN(num, n);
}
else if (sw==2||sw==8||sw==16)//其他转十进制
{
printf("请输入数据\n");
scanf("%d", &num);
NToTen(num, sw);
}
else
{
printf("输入异常!");
}
return 0;
}
网友评论