进制转换

一.十进制转为其它进制

下面以北邮2012年的机试题目作为例子:

题目描述:

  大家都知道,数据在计算机里中存储是以二进制的形式存储的。
  有一天,小明学了C语言之后,他想知道一个类型为unsigned int 类型的数字,存储在计算机中的二进制串是什么样子的。
  你能帮帮小明吗?并且,小明不想要二进制串中前面的没有意义的0串,即要去掉前导0。

输入:

第一行,一个数字T(T<=1000),表示下面要求的数字的个数。
接下来有T行,每行有一个数字n(0<=n<=10^8),表示要求的二进制串。

输出:

输出共T行。每行输出求得的二进制串。

样例输入:
5
23
535
2624
56275
989835
样例输出:
10111
1000010111
101001000000
1101101111010011
11110001101010001011
源代码如下:

#include<iostream>
using namespace std;

typedef struct stack{
	int top;
	int data[100];
}Stack;

void  ConvertToBinary(Stack *s,unsigned long int d)
{
	s->top = 0;
	while(d)
	{
		s->data[s->top++] = d%2;//此处是先加
		d = d/2; 
	}
	
	while(s->top)
	{
		cout << s->data[--s->top];//切记此处是先减
	}
	cout << endl;
}
int main()
{
	int i = 0;
	int n = 0;
	unsigned long int d = 0;
	Stack *s = new Stack(); 
	while(cin >> n)
	{
		for(i = 0;i < n;i++)
		{
			cin >> d;
			if(d != 0)
			    ConvertToBinary(s,d);
			else
			    cout << "0" << endl;
		}
	}
	return 0;
 } </span>
 

二.其它进制转为十进制

这是一个幂次相加的问题

<span style="font-size:18px;">#include<iostream>
using namespace std;

int main()
{ 
    char buff[64];    // 输入缓存
    int n=0;        // 二进制位数
    int w=1;        // 当前位权重

    int number=0;    // 十进制值

    // 输入
    cout<<"请输入二进制值(最大32位)"<<endl;
    cin>>buff;

    // 获取长度,去除非法数
    char* p=buff;
    while(*p>='0' && *p++<='1') n++; // 只能是1或0----这里注意:后缀++的优先级高于解引用*的优先级
    
    // 转换2进制到10进制,<span style="color:#ff0000;">注意高位与地位的问题,上面n的计数是从左到右的,但是大小应该是从右到左的</span>
    while(n--)
    {
        number += (buff[n]-'0')*w;
        w*=2;
    }

    // 输出
    cout << "对应的十进制值:"<< endl;
    cout<< number<<endl;
    return number;
} 
</span>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值