首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

一道超时了的题 请帮小弟我看下 多谢

2012-02-08 
一道超时了的题 请各位高手帮我看下 谢谢火星来客TimeLimit:1000MSMemoryLimit:65535KTotalSubmit:426Acce

一道超时了的题 请各位高手帮我看下 谢谢
火星来客

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很费时的说,为什么不修改后整体输出?

热点排行