问题分析:这个问题有两种方法,第一种是建造一个全局变量的二维数组x[16][16],通过循环调用函数(将一个十进制数变为二进制然后放入数组中),然后通过循环,判断每一位是否为1,是则输出“*”。第二种方法是用c语言的库函数组合bitset(8) t(n);将十进制的n转变为8位二进制的数字。
问题代码一:
#include
int x[16][16]={};
void c(int n,int g,int l)
{
int k=0;
if(n<0)
{
x[g][l-7]=1;
n*=-1;
}
else
{
x[g][l-7]=0;
}
for(int m=0;m<7;m++)
{
if(n>=2)
{
x[g][l-k]=n%2;
n=n/2;
k++;
}
else
{
x[g][l-k]=n;
break;
}
}
}
int main()
{
int i,j,p;
for(i=0;i<16;i++)
{
for(j=7;j<16;j+=8)
{
scanf("%d",&p);
c(p,i,j);
}
}
for(i=0;i<16;i++)
{
for(j=0;j<16;j++)
{
if(x[i][j]==1)
{
printf("*");
}
else
{
printf(" ");
}
}
printf("\n");
}
return 0;
}
问题代码二:
#include
#include
using namespace std;
int main()
{
int n,m;
int len;
string temp;
bitset<8> t;
while(cin>>n>>m)
{
t = n;
temp = t.to_string();
len = temp.length();
for(int i = 0; i < len; i++)
{
if(temp[i]=='0')
{
cout << " ";
}
else
{
cout << "*";
}
}
t = m;
temp = t.to_string();
len = temp.length();
for(int i = 0; i < len; i++)
{
if(temp[i]=='0')
{
cout << " ";
}
else
{
cout << "*";
}
}
cout << endl;
}
}
问题结果:
问题回顾:方法一中的代码主函数中循环是从7开始,每次加8(j+=8,不是j+8),注意==和=!,bitset(8) b(6)表示将6变成8位二进制位的数值。