zoukankan      html  css  js  c++  java
  • 十进制与任意进制的转换 分类: 编程 2014-12-25 21:45 91人阅读 评论(0) 收藏

    进制的转换是个十分基础的问题,很多字符串变换的过程本质上都可以归结为进制的转换

    首先是十进制转换为二进制

    //十进制转换为二制的源码  
    #include <iostream>  
    #include<stdlib.h>
    #include<vector>
    using namespace std;  
    
    void ten2two(int n)
    {
    	vector<int> vec;
    	while(n)
    	{
    		vec.push_back(n%2);
    		n=n/2;	
    	}
    	vector<int>::iterator iter;
    	for(iter=vec.end()-1;iter!=vec.begin();iter--)
    	{
    		cout<<*iter;
    	}
    	cout<<*iter;
    	cout<<endl;
    }
    
    
    
    int main()
    {
    	int num;
    	cin>>num;
    	ten2two(num);
    	system("pause");
    	return 1;
    }


    我们知道二进制是计算机最基本的操作,因此是十分特别的,我们可以直接通过位操作来得到十进制的二进制形式,其中涉及位的基本操作

    #include <iostream>  
    #include<stdlib.h>
    #include<vector>
    using namespace std;  
    
    int ten2two(int n)
    {
    	int i,k;
    	vector<int> vec;
    	for(i=0;i<sizeof(int)*8;i++)
    	{
    		if(n & (1<<i)) k=i;
    	}
    	for(i=0;i<=k;i++)
    	{
    		if(n & (1<<i))
    			vec.push_back(1);
    		else
    			vec.push_back(0);
    	}
    	vector<int>::iterator iter;
    	for(iter=vec.end()-1;iter!=vec.begin();iter--)
    	{
    		cout<<*iter;
    	}
    	cout<<*iter;
    	return 1;
    	
    
    
    }
    
    
    int main()
    {
    	int num;
    	char i;
    	string s;
    	cin>>num;
        ten2two(num);
    	system("pause");
    	return 1;
    }



    接下来是十进制转换任意大于进制(大于十),此时如果余数大于等于10,我们需要用英文字母来表示

    //十进制转换为任意进制的源码  
    #include <iostream>  
    #include<stdlib.h>
    #include<vector>
    using namespace std;  
    
    #define NUM 16
    void ten2n(int n)
    {
    	vector<int> vec;
    	while(n)
    	{
    		vec.push_back(n%NUM);
    		n=n/NUM;	
    	}
    	vector<int>::iterator iter;
    	for(iter=vec.end()-1;iter!=vec.begin();iter--)
    	{
    		if(*iter>=10)
    			cout<<(char)(*iter + 55);
    		else
    			cout<<*iter;
    	}
    	if(*iter>=10)
    		cout<<(char)(*iter + 55);
    	else
    	cout<<*iter;
    	cout<<endl;
    }
    
    
    
    int main()
    {
    	int num;
    	cin>>num;
    	ten2n(num);
    	system("pause");
    	return 1;
    }


    接下来我们来看leetcode上的一道题

    Excel Sheet Column Title

     

    Given a positive integer, return its corresponding column title as appear in an Excel sheet.

    For example:

        1 -> A
        2 -> B
        3 -> C
        ...
        26 -> Z
        27 -> AA
        28 -> AB 

    这道题目可以看做是十进制转换为二十六进制+string操作的练习

    //十进制转换为任意进制的源码  
    #include <iostream>  
    #include<stdlib.h>
    #include<string>
    using namespace std;  
    
    string convertToTitle(int n) 
    { 
    	string s;
    	char c;
    	if(n<1)
    		return "";
    	else
    	{
    		while(n)
    		{
    			n--;
    			c=n%26+'A';
    			s +=c;
    			n=n/26;
    		}
    		reverse(s.begin(),s.end());
    		return s;
    	}
    
    
    }
    
    
    
    int main()
    {
    	int num;
    	char i;
    	string s;
    	cin>>num;
    	s=convertToTitle(num);
    	for(i=0;i<s.length();i++)
    	{
    		cout<<s[i];
    	}
    	system("pause");
    	return 1;
    }



    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    C++ Builder 全部API函数列表
    返回对应对象的克隆方法
    如何求出三角形的面积
    通用序列化基类 只须实现该类抽象成员即可进行序列化与反序列化
    【分享】JS添加/删除事件处理函数(支持IE,FF,opera,safari)
    如何将字符串序列化到CDATA块中(Serializing A String Within a CDATA Element )
    反射调用静态类的方法,字段
    浏览器选项
    AppDomain 和动态加载
    c#中Enum类型定义与获取值或描述方法 半语小马哥 CSDNBlog
  • 原文地址:https://www.cnblogs.com/learnordie/p/4656978.html
Copyright © 2011-2022 走看看