10进制转换为15进制(面试题)

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;
    
}
发布了63 篇原创文章 · 获赞 149 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/huijiaaa1/article/details/104185798