题目描述
有人说,中国古代的“周易”是二进制系统的起源,在该系统中,他们用“- -”表示1,“---”表示0。因此,二进制数字“011010”可以表述为“---\n- -\n- -\n---\n- -\n---\n”(符号“\n”表示换行)。现在的问题是如何把一个十进制数转换为“周易”中的二进制?
输入
文件中包含多组测试数据。每个测试数据占一行,包括一十进制整数n(0 <= n <= 1000000)和表示二进制位数的k(0 < k <= 20 且 n < 2k)。
n=0,k=0表示输入结束。
输出
对于每组测试数据,输出“周易”中对应的k行二进制数。每组测试数据之间输出一个空行。
样例输入
7 3
0 3
26 6
0 0
样例输出
- -
- -
- -
---
---
---
---
- -
- -
---
- -
---
MyAns:
#include <iostream>
#include <math.h>
#include <string>
#include <string.h>
#include <algorithm>
using namespace std;
int tenToRSum(int num, int n, int R)
{
int Sum = 0;
for (int i = 0;i < n;i++)
{
Sum += num % R;
num /= R;
}
return Sum;
}
int count(int num)
{
int count = 0;
while (num != 0)
{
num /= 10;
count++;
}
return count;
}
string myStrrev(string str,int n)
{
string ans = "";
for (int i = 0;i < n;i++)
{
ans += str[n - i - 1];
}
return ans;
}
string tenToR(int num, int R)
{
char ans[100] = { 0 };
int count = 0;
if (num < 0)
{
num = -num;
}
if (R <= 10)
{
while (num != 0)
{
ans[count] = (num % R + '0');
num /= R;
count++;
ans[count] = '\0';
}
}
else
{
while (num != 0)
{
if (num % R >= 10)
{
ans[count] = (num % R + 'A' - 10);
num /= R;
count++;
ans[count] = '\0';
}
else
{
ans[count] = (num % R + '0');
num /= R;
count++;
ans[count] = '\0';
}
}
}
return myStrrev(ans,count);
}
int mySize(string str)
{
int i = 0;
for (i = 0;i < 100; i++)
{
if (str[i] == '\0')break;
}
return i;
}
void printZhouYi(int num, int n)
{
string binary = tenToR(num, 2);
int len = mySize(binary);
for (int i = len;i < n;i++)
{
binary.insert(0,"0");
}
for (string::iterator it = binary.begin();it != binary.end();it++)
{
if (*it == '0')cout << "---" << endl;
else if (*it == '1')cout << "- -" << endl;
}
cout << endl;
}
int main()
{
int num,n;
while (scanf("%d %d",&num,&n) != EOF)
{
if (n == 0)break;
printZhouYi(num, n);
}
return 0;
}