时间限制:1 秒

内存限制:32 兆

特殊判题:否

提交:2388

解决:935

题目描述:

将一个长度最多为30位数字的十进制非负整数转换为二进制数输出。

输入:

多组数据,每行为一个长度不超过30位的十进制非负整数。

(注意是10进制数字的个数可能有30个,而非30bits的整数)

输出:

每行输出对应的二进制数。

样例输入:
0
1
3
8
样例输出:
0
1
11
1000
来源:
2008年北京大学软件所计算机研究生机试真题

思路:

并不难的进制转换题,注意0的处理。

代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h> #define LEN 30
#define I 9
#define N ( (LEN%I > 0) ? (LEN/I+1) : (LEN/I) )
#define M (I*N) int divide2(int *a)
{
int i, result;
for (i=0; i<N; i++)
{
//printf("=======a[%d] = %d\n", i, a[i]);
if (i < N-1)
a[i+1] += (a[i] % 2) * pow(10, I);
else
result = a[i] % 2;
a[i] /= 2;
//printf("=======a[%d] = %d\n", i, a[i]);
}
return result;
} int isZero(int *a)
{
int i, iszero = 1;
for (i=0; i<N; i++)
{
if (a[i] != 0)
{
iszero = 0;
break;
}
}
return iszero;
} int main(void)
{
int a[N];
char s[M+1], s2[M*4+1], tmpInt[I+1];
int i, len; while (scanf("%s", s) != EOF)
{
len = strlen(s);
for (i=len-1; i>=0; i--)
s[M-len+i] = s[i];
for (i=0; i<M-len; i++)
s[i] = '0';
s[M] = '\0';
//printf("s = %s\n", s); for (i=0; i<N; i++)
{
strncpy(tmpInt, s+i*I, I);
tmpInt[I] = '\0';
//printf("tmpInt = %s\n", tmpInt);
a[i] = atoi(tmpInt);
//printf("a[%d] = %d\n", i, a[i]);
} i=0;
do
{
s2[i++] = divide2(a)+'0';
//for (int j=0; j<N; j++)
// printf("a[%d] = %d\n", j, a[j]);
//printf("iszero = %d\n", isZero(a));
} while (!isZero(a));
s2[i] = '\0'; len = strlen(s2);
for (i=len-1; i>=0; i--)
printf("%c", s2[i]);
printf("\n");
} return 0;
}
/**************************************************************
Problem: 1138
User: liangrx06
Language: C
Result: Accepted
Time:90 ms
Memory:920 kb
****************************************************************/

最新文章

  1. ELF静态链接
  2. 如何在网页中嵌套其他的HTML文件
  3. midi格式
  4. DOM - 5.事件冒泡 + 6.事件中的this
  5. hdu5432 二分
  6. (转)create table #temptable 临时表 和 declare @bianliang table ()表变量
  7. convert2Mp4 code snippet
  8. Windows计算机功能Java源码
  9. AngularJS(5)-Http
  10. LoadRunner脚本优化之—参数化迭代介
  11. v4l2简介
  12. Bitbucket Pull Request和fork
  13. R6010 -abort() has been called错误分析及其解决方法
  14. Java程序执行Linux命令
  15. C#中IList&lt;T&gt;与List&lt;T&gt;的区别
  16. UVa 496 - Simply Subsets
  17. block循环饮用解决
  18. hdu_1017(水水水,坑格式)
  19. popstate事件在低版本webkit中的调用
  20. SNF软件开发机器人-子系统-导出-导入功能-多人合作时这个功能经常用到

热门文章

  1. 关于vsftp所遇问题
  2. C#读取Excel 几种方法的体会
  3. Win10下安装Docker及tensorflow(cpu版)
  4. 牛客网 Wannafly挑战赛11 A.白兔的分身术
  5. 关于 Bellman-Ford 与 Floyd 算法的一点感想
  6. ApplicationContext介绍
  7. SQL Server 2008 镜像的监控 - Joe.TJ -
  8. 邁向IT專家成功之路的三十則鐵律 鐵律二十九 IT人富足之道-信仰
  9. mac升级系统自带numpy失败解决方案
  10. 理解Neural Style