一道超时了的题 请各位高手帮我看下 谢谢
火星来客
Time Limit:1000MS Memory Limit:65535K
Total Submit:426 Accepted:62
Description
有一个火星人来到地球做客,但是由于他只有2个手指,所以不能理解地球上广泛使用的10个手指计数的情况,为了便于交流,所以我们需要将我们的计数方法转换为他们所能理解的方式。
Input
第一行为需要转换的总个数M,1≤M≤150000
每行有一个数字,1≤N≤2^32
Output
对每个输入有一个对应的32位的二进制输出,不足32位的前端添0补足32位
Sample Input
3
1
5
9
Sample Output
00000000000000000000000000000001
00000000000000000000000000000101
00000000000000000000000000001001
我的程序是
#include <iostream>
using namespace std;
long A[150000][32],a[150000];
int main()
{
int i,j,n,b;
scanf( "%d ",&n);
for(j=0;j <n;j++)
scanf( "%d ",&a[j]);
for(j=0;j <n;j++)
{
i=31;
while(a[j]!=0)
{
b=a[j]%16;
if(b==0)
{A[j][i]=0,A[j][i-1]=0,A[j][i-2]=0,A[j][i-3]=0;}
if(b==1)
{A[j][i]=1,A[j][i-1]=0,A[j][i-2]=0,A[j][i-3]=0;}
if(b==2)
{A[j][i]=0,A[j][i-1]=1,A[j][i-2]=0,A[j][i-3]=0;}
if(b==3)
{A[j][i]=1,A[j][i-1]=1,A[j][i-2]=0,A[j][i-3]=0;}
if(b==4)
{A[j][i]=0,A[j][i-1]=0,A[j][i-2]=1,A[j][i-3]=0;}
if(b==5)
{A[j][i]=1,A[j][i-1]=0,A[j][i-2]=1,A[j][i-3]=0;}
if(b==6)
{A[j][i]=0,A[j][i-1]=1,A[j][i-2]=1,A[j][i-3]=0;}
if(b==7)
{A[j][i]=1,A[j][i-1]=1,A[j][i-2]=1,A[j][i-3]=0;}
if(b==8)
{A[j][i]=0,A[j][i-1]=0,A[j][i-2]=0,A[j][i-3]=1;}
if(b==9)
{A[j][i]=1,A[j][i-1]=0,A[j][i-2]=0,A[j][i-3]=1;}
if(b==10)
{A[j][i]=0,A[j][i-1]=1,A[j][i-2]=0,A[j][i-3]=1;}
if(b==11)
{A[j][i]=1,A[j][i-1]=1,A[j][i-2]=0,A[j][i-3]=1;}
if(b==12)
{A[j][i]=0,A[j][i-1]=0,A[j][i-2]=1,A[j][i-3]=1;}
if(b==13)
{A[j][i]=1,A[j][i-1]=0,A[j][i-2]=1,A[j][i-3]=1;}
if(b==14)
{A[j][i]=0,A[j][i-1]=1,A[j][i-2]=1,A[j][i-3]=1;}
if(b==15)
{A[j][i]=1,A[j][i-1]=1,A[j][i-2]=1,A[j][i-3]=1;}
a[j]=a[j]/16;
i--;
}
for(i=0;i <32;i++)
{
if(A[j][i]==1)printf( "%d ",A[j][i]);
else printf( "%d ",0);
}
printf( "\n ");
}
return 0;
}
[解决办法]
恰好昨天给别人写了一个类似的程序,能够实现把十进制转化成二进制。你自己修改一下就行了
#include <stdio.h>
void convert( unsigned int num ); //该函数实现转换
int main()
{
unsigned int a =8; //用8来测试转换
convert(a);
return 0;
}
void convert( unsigned int num )
{
int len;
len = sizeof( num );
for ( int i = 31 ; i > = 0; i-- )
{
if ( num & (1 < <i) )
printf( "1 " );
else
printf( "0 " );
}
}
[解决办法]
CSDN的格式真恶心!
#include <stdio.h>
void convert( unsigned int num );
int main()
{
unsigned int a =8;
convert(a);
return 0;
}
void convert( unsigned int num )
{
int len;
len = sizeof( num );
for ( int i = 31 ; i > = 0; i-- )
{
if ( num & (1 < <i) )
printf( "1 " );
else
printf( "0 " );
}
}
------解决方案--------------------
to ls: printf很费时的说,为什么不修改后整体输出?