一.十进制转为其它进制
下面以北邮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>