10进制转15进制
好久都没写过C语言了,其实本来也想用C练习练习数据结构的。只是一直没有时间。今天,朋友让我做一道题,然后,我就重新装好vc。本想装vs的,但是想着体积太庞大了。本地环境够多了四年的游戏本折腾不起了。
其实没觉得这道题有难度,只是朋友说百度搜不到 C语言实现版的,只有java版的。所以再此献上 C语言版的,其实思路都一样。
因为朋友也没有什么过多的要求,顾没有提供小数转换。只提供 整数转化实现过程。
其实思路也蛮简单的。首先 ,大家都知道 10进制转2进制的过程是怎么样的吗?
过程是: 要转换的数字 ,一直除以2,并保留每次的余数,最终翻转余数即可。翻转的余数即就是对应的2进制。那么同理,转换15进制也是这个道理。我们只需要对 要转换的 数字 除以 15,所得到的 余数 翻转即可得到结果。
提供算法如下:
#include <stdio.h>
#include <string.h>
#include<stdlib.h>
void tranform(int num,char *result);
int inverse(char *str1);
int main(void) {
char result[100];
int input;
puts("请输入要转换的数字:");
scanf("%d",&input);
tranform(input,result);
inverse(result);
printf("结果:%s\n",result);
system("pause");
return 0;
}
/*
* 翻转字符串
* @param str1 要翻转的 字符串
*/
int inverse(char *str1)
{
int length = 0;
char *p1 = NULL;
char *p2 = NULL;
if (str1 == NULL)
{
return -1;
}
length = strlen(str1);
p1 = str1;
// p2指针指向 要反转字符串的末尾
p2 = str1 + (length - 1);
// p2 指针前移 p1指针后移 之后两指针的内容交换即可翻转
while (p1 < p2)
{
char c = *p1;
*p1 = *p2;
*p2 = c;
++p1;
--p2;
}
return 0;
}
/*
* 10进制转换为 15 进制
* @param num 要转换的数字
* @param result 把 翻转后的结果保存到该指针地址(实参可以是数组)
*/
void tranform(int num,char *result){
char res;
int i = 0;
int temp = num;
while(num > 0 )
{
//取 余数
temp = num%15;
// 取 除数
num = num/15;
// 如果余数大于10,那么需要换成对应的字符,否则直接 ascii码+ 0x30。
if( temp >= 10 )
{
switch(temp){
case 10:
res = 'A';
break;
case 11:
res = 'B';
break;
case 12:
res = 'C';
break;
case 13:
res = 'D';
break;
case 14:
res = 'E';
break;
}
result[i++] = res;
}else{
//想想为什么是加0x30呢,因为0x30是字符 ‘0’ 的ascii码
result[i++] = temp+0x30;
}
}
result[i]=0;
}