zoukankan      html  css  js  c++  java
  • [codeup] 1943 进制转换

    题目描述

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

    输入

    多组数据,每行为一个长度不超过30位的十进制非负整数。(注意是10进制数字的个数可能有30个,而非30bits的整数)

    输出

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

    样例输入

    0
    1
    3
    8

    样例输出

    0
    1
    11
    1000

    IDEA

    长整数用字符串形式存储,主要解决的问题是字符串如何进行除法和余数。余数不用多说,就是最后一位余2就行。除法则应该按照平时手算除法的顺序进行,比如:

    for (i = 0; i < len - 1; i++) {
    	s[i+1] += (s[i] % 2) * 10;
    	s[i] /= 2;
    }
    

    剩下的就是依照平时的整数进制转换的顺序来即可。

    SOLUTION

    #include <stdio.h>
    #include <string.h>
    
    int main()
    {
    	int i, len, num, sum;
    	char s[100];
    	char ans[100];
    
    	while (scanf("%s", s) != EOF) {
    		len = strlen(s);
    		for (i = 0; i < len; i++)
    			s[i] -= '0';
    		
    		num = 0;
    		memset(ans, 0, sizeof ans);
    
    		do {
    			/* sum of each digit */
    			sum = 0;
    
    			/* % 2 */
    			ans[num++] = s[len - 1] % 2 + '0';
    
    			/* / 2 */
    			for (i = 0; i < len - 1; i++) {
    				s[i+1] += (s[i] - ((s[i] >> 1) << 1)) * 10;
    				s[i] >>= 1;
    				sum += s[i];
    			}
    			s[i] >>= 1;
    			sum += s[i];
    		} while (sum != 0);
    
    		while (num--)
    			putchar(ans[num]);
    		putchar('\n');
    	}
    	return 0;
    }
    
  • 相关阅读:
    IOTest-InputStream-OutputStream
    JSP
    java链表
    区块链
    MySQL常用命令
    jQuery
    javascript
    Nginx
    Linux
    Hive
  • 原文地址:https://www.cnblogs.com/trav/p/10311937.html
Copyright © 2011-2022 走看看