南洋理工第275题 十进制转二进制的

来源:互联网 发布:广州恒大淘宝足球队 编辑:程序博客网 时间:2024/04/29 19:26

我的代码:

一开始不知道怎么输出

因为传统的转换(百度百科的)是要逆序输出

逆序输出我只能想着用数组实现,可是太土了不想用

最后想到了用递归(我最喜欢的,哈哈,可是用得好丑)

#include <stdio.h>#include <string.h>void change(int ni){int k = ni%2;if(ni/2) change(ni/2);printf("%d",k);}int main(){int ni;while(scanf("%d",&ni)!=EOF){change(ni);printf("\n");}return 0;}        

 用时612

一个用时少很多(128)的:

 #include <stdio.h>int main (){int n, a = 1<<31, t, i;while (~scanf ("%d", &n)){t = 0;if (n == 0){printf ("0\n");continue;}while ((n&a) == 0){n = n<<1;t ++;}for (i = t; i < 32; i ++){if ((n&a) == 0)printf ("0");else printf ("1");n = n<<1;}printf ("\n");}return 0;} 


 

用时最少的(67):

 

 #include <cstdio>int main(){int n,i;char arr[32];arr[31]='\0';while(~scanf("%d",&n)){if(!n)puts("0");for(i=30;n;i--)arr[i]=n%2+'0',n/=2;puts(arr+i+1);}}        


难道去掉空格回车用时会变少?

原创粉丝点击