• 【腾讯校招在线考试附加题】将一个10进制数转换为四位定长的36进制数


        要求:


    思路:首先很容易知道当n的值<=35时,则该四位36进制的最终结果前3位全为0,只最后一位为该数字在36位二进制中表示的字母,我们可以用一个函数char digitalToChar(int n)来将一个数字转换为其在36进制中对应的字符,当n值>35时,我们我们举几个简单的例子来分析一下:如n=36,则最终结果为0010,我们知道将一个10进制数转换为k进制数采用的是除k取余,即将该数n对k取余所得结果放在最低位,然后将n不断除以k然后取余放在次低位直至商为0为止。如:36%36=0,所以最终结果最低位为0,然后将(36/36)%36=1,所以次低位为1,然后将(1/36)%36=0所以循环终止,即最终结果为10(用四位表示则为0010),与
    最终结果相符,所以解决此题的关键是弄清楚10进制值转换为k进制用处k取余。

    基于上述思路代码如下:
    #include<iostream>
    using namespace std;
    char digitalToChar(int n)
    {
    	if(n>=10)
    		return 'A'+(n-10);
    	else
    		return n +'0';//注意因为是将数字转换为字符,所以即使当n<10时仍应以字符的形式表示,所以此处不可以直接返回n
    
    }
    void digitalTo36(int n)
    {
    	if(n<0)
    	{
    		cout<<"参数错误"<<endl;
    		return;
    	}
    	char result[5],ch;//因为最终结果以四位二进制表示,所以定义一个长度为5的字符数组用来存储最终结果
    	result[4]='';
    	memset(result,'0',4);//注意初始化的时候用字符'0'初始化而不是数字0初始化,如果用数字0初始化则表示字符''
    	int index=3;
    	int digital;
    	if(n<=35)
    	{
    		result[index]=digitalToChar(n);
    
    	}else
    	{
    		while(n%35)
    	{
    		digital=n%36;
    		ch=digitalToChar(digital);
    		result[index--]=ch;
    		n/=36;
    
    	}
    	}
    	
    	cout<<result<<endl;
    }
    
    int main()
    {
    	int n;
    	cin>>n;
    	digitalTo36(n);
    	return 1;
    }

    程序运行结果如下:



  • 相关阅读:
    c#数据类型
    遮罩层
    图片轮播
    js 获取浏览器高度和宽度值
    bootstrap、jquery
    洛谷P1442 铁球落地 题解
    HDU3016 Man Down 题解
    POJ2892 Tunnel Warfare 题解
    HDU2795 Billboard 题解
    CF920F SUM and REPLACE 题解
  • 原文地址:https://www.cnblogs.com/hainange/p/6334072.html
Copyright © 2020-2023  润新知