连续输入多个八进制数,转为二进制数
问题描述:在控制台连续输入多个八进制数(中间用空格隔开),把这些八进制数转为二进制数。
源代码如下:
# include<iostream>
using namespace std;
//说明:234的个位数是4,十位数是3,百位数是2。(下面我把个位数十位数百位数...统称为位数)
//算法思想,将八进制数拆成单个的八进制位数,然后将1个八进制位数,转换成3个二进制位数。
//十六进制,四进制,N进制(N是2的x次方),都可以用这个算法细想。
void fun1(int b)
{
//数组e1存放被拆分好的八进制位数。
//e1可以多申请点儿空间,以便存入较多的数据,转换较大的八进制数。
int e1[1000];
int i = 0;
int a1;
int b1 = b;
//拆分数据,并且放入数组。(*注意这里把八进制的最高位,放到了数组的最后)
for (; b1 != 0 ;)
{
a1 = b1%8;
e1[i] = a1;
b1 = b1/8;
i++;
}
//i是数组e1最后一个元素的下标。
i--;
//数组t用来存放单个八进制数位转换的二进制位数。
//(注意:数组e1最后的数据,被存放在了数组t的最前面。也就是说八进制的最高位被存放在了数组t的前面)
int t[1000];
int u = 0;
int a2;
int b2;
//记录数组t的元素个数
int num2 = 0;
for (; i >= 0 ; i--)
{ //注意把1个八进制位数得到的3个二进制位数倒着存放在数组t中
u = u + 2;
//内层循环:将一个八进制数位,转换成三个数位。
for (int i1 = 0 ; i1 < 3 ; i1++)
{
a2 = e1[i]%2;
t[u] = a2;
u = u - 1;
b2 = e1[i]/2;
num2++;
}
//内层循环新起点
u = u + 4;
}
// 数组t的最后一个元素的下标
u = u - 1;
//经过上面的处理,八进制位数转换成的二进制位数,已经被存放在了数组t内(t有num2个元素,最后一个元素下标为u)
for (int i2 = 0 ; i2 < num2 ; i2++)
{
//循环打印数组元素,得到转换后的二进制数。
cout<<t[i2];
}
cout<<endl;
}
int main()
{
int a;
//输入多个八进制数转换为二进制数。
while (cin>>a)
{
if (a == 0)
{
cout<<a<<endl;
continue;
}
else
{
fun1(a);
}
}
system("pause");
return 0;
}