#include "stdafx.h"
#include<iostream>
#include<string>
using namespace std;
constexpr auto MAX = 100;
int l1, l2; /*二进制数组和翻译码数组长度*/
void It(char a[], char b[]) /*初始化数组a[],b[]*/
{
for (int i = 0; i < MAX; i++)
{
a[i] = 0;
b[i] = 0;
}
}
void EC1(int m, char a[]) /*十进制数转换为二进制数函数*/
{
int i, temp;
l1 = 0;
for (i = 0; i < MAX; i++) /*给二进制数组赋值*/
{
a[i] = m % 2;
m = m / 2;
if (m != 0 || a[i] != 0)
l1++;
}
for (i = 0; i < l1 / 2; i++)
{
temp = a[i];
a[i] = a[l1 - 1 - i];
a[l1 - 1 - i] = temp;
}
cout << "转化后的二进制数为:"; /*输出转换后的二进制数*/
for (i = 0; i < l1; i++)
cout << a[i] << endl;
}
void EC2(char a[], char b[]) /*二进制位用翻译码表示函数*/
{
int i;
l2 = 0;
for (i = 0; i < l1; i++) /*给磁翻译数组赋值*/
{
if (a[i] == 1)
{
b[l2] = 0;
b[++l2] = 1;
b[++l2] = 0;
}
if (a[i] == 0)
{
b[l2] = 0;
b[++l2] = 0;
}
}
b[++l2] = 1;
b[++l2] = 1;
for (i = l2 + 1; i < MAX; i++) /*将未赋值的数组元素初始化为0*/
b[i] = 0;
cout << "转化后的翻译码:"; /*输出初始翻译码*/
for (i = 0; i <= l2 + 1; i++)
cout << b[i] << endl;
}
void New(char b[]) /*翻译码×2运算指令*/
{
int symbol = 0;
for (int i = 0; i <= MAX; i++) /*进行运算并将结果重新赋值给翻译码数组*/
{
if (b[i] == 0)
{
if (symbol == 1)
{
symbol = 0;
b[i] = 1;
}
else if (symbol == 2)
{
symbol = 3;
b[i] = 1;
}
else if (symbol == 3)
{
symbol = 0;
b[i] = 1;
b[i + 1] = 0;
break;
}
}
else if (b[i] == 1)
if (symbol == 0)
{
symbol = 1;
b[i] = 0;
}
else if (symbol == 1)
{
symbol = 2;
b[i] = 0;
}
}
cout << "运算后的翻译码为:"; /*输出运算后的翻译码*/
for (int i = 0; i <= l2 + 3; i++)
cout << b[i] << endl;
}
void DP1(char a[], char b[]) /*运算后翻译码转换为二进制数的函数*/
{
int i, symbol = 0;
l1 = 0;
for (i = 0; i < MAX; i++)
{
if (b[i] == 1)
{
a[l1++] = 1;
symbol = 1;
break;
}
}
for (; i < MAX; i++)
{
if (b[i] == 0)
{
if (b[i + 1] == 0)
a[l1++] = 0;
else if (b[i + 1] == 1)
if (b[i + 2] == 1)
{
cout << "运算后的二进制数为:";
for (i = 0; i < l1; i++)
cout << a[i] << endl;
return;
}
else
a[l1++] = 1;
}
}
}
void DP2(char a[]) /*将运算后的二进制数转换为十进制数*/
{
int i, j, temp = 0;
for (i = 0; i < l1; i++)
{
for (j = l1 - 1; j > i; j--)
a[i] = a[i] * 2;
temp = temp + a[i];
}
cout << "运算结果为:";
cout << temp;
}
int main()
{
int m;
char a[MAX], b[MAX]; /*定义字符数组a[],b[]*/
It(a, b);
cout << "请输入进行操作的十进制数:";
cin >> m; /*输入进行操作的十进制数*/
EC1(m, a);
EC2(a, b);
New(b);
DP1(a, b);
DP2(a);
return 0;
}