精华内容
下载资源
问答
  • ① 十进制数字转换为其他进制的数字可以使用辗转相除法,直到最后n == 0结束,对于这道题目是转换为二进制数字,结合辗转相除法在循环中我们每次先求解出n % 2的结果,然后将n除以2,因为每一次我们计算出的结果是从...

    1. 问题描述:

    编写一个算法,将一个非负十进制数字n转换为二进制数字

    2. 思路分析:

    ① 十进制数字转换为其他进制的数字可以使用辗转相除法,直到最后n == 0结束,对于这道题目是转换为二进制数字,结合辗转相除法在循环中我们每次先求解出n % 2的结果,然后将n除以2,因为每一次我们计算出的结果是从低位开始的,所以需要借助于栈来存储n % 2的结果,等到n / 2 == 0的时候结束,那么就可以弹出栈中存储的结果,弹出的结果是从高位开始的,符合结果

    ② 栈我们可以使用C++标准模块板库中的stack

    3. 下面是具体的代码:

    #include<stdio.h>
    #include<stack>
    using namespace std;
    int convert(int n){
    	int i, result = 0;
    	stack<int> res;
    	while(n != 0){	
    		res.push(n % 2);
    		n /= 2;
    	}
    	//弹出相应的元素
    	while(!res.empty()){
    		printf("%d", res.top());
    		res.pop();	
    	} 
    } 
    int main(void){
    	int n; 
    	scanf("%d", &n);
    	convert(n);
    	return 0;
    }
    

     

    展开全文
  • 题目大意就是将十进制转换成二进制,难就难在十进制的位数小于100位。 这就意味着不能用任意类型来存,只能用数组来存。 十进制转二进制十进制转二进制 十进制整数转换为二进制整数采用"除2取余,逆序排列"法...

    题目链接:http://dsalgo.openjudge.cn/huawen02/3/

    题目大意就是将十进制数转换成二进制,难就难在十进制数的位数小于100位。

    这就意味着不能用任意类型来存,只能用数组来存。

    十进制转二进制十进制转二进制 十进制整数转换为二进制整数采用"除2取余,逆序排列"法。 具体做法是:用2整除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数,如此进行,直到商为0时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来。

    根据转换规则直接就能联想到大整数的除法,但这又比传统大整数的除法要简单,因为它的除数固定是2。

    1. 对stu数组每一位 /2 得到新的被除数的对应位置的数字。

    2. 当 i!= len-1 时,就要计算下一位是否需要 加上(前一位对2取余,再乘上10)。

    3. 当 i == len-1 时, 意味着被除数到了最后一位了,就可以直接对2取余,得到result的相应位置的结果。

    #include <cstdio>
    #include <cstring>
    #include <iostream>
    using namespace std;
    char stu[101];
    char result[1000];
    int len;
    int main()
    {
        while(~scanf("%s",stu))
        {
            len = strlen(stu);
            int beichushu_weiling = 1;
            int k=0;
            while(beichushu_weiling)
            {
                beichushu_weiling=0;
                for(int i=0;i<len; ++i)
                {
                    //检查除的结果是否为0
                    int linshi_beichushu = (stu[i]-'0')/2;
                    if(linshi_beichushu)
                        beichushu_weiling=1;
                    if(i==len-1)
                    {
                        //当是被除数最后一位时,就能直接得出余数是多少
                        result[k++] = (stu[i]-'0')%2+'0';
                    }
                    else
                    {
                        //一定要记住前一位的余数加到后一位,需要乘上10
                        stu[i+1] = (stu[i]-'0')%2*10+stu[i+1];
                    }
                    //用来得到新的被除数stu
                    stu[i] = linshi_beichushu+'0';
                }
            }
            result[k]='\0';
            //result的结果需要调转顺序
            for(int i=0,j=k-1; i<j; i++,j--)
            {
                char temp = result[i];
                result[i] = result[j];
                result[j] = temp;
            }
            printf("%s\n",result);
        }
        return 0;
    }
    




    展开全文
  • 输出整数的二进制数

    2021-04-23 10:26:08
    整数在内存中就是以二进制数存的,实际上可以通过唯一操作来计算每一位的值。 取出32位中第N(0<=N<=31)位的值 bit = value &( 1 << N ) int Fuuu(int num) { for (int i = 31; i >= 0; i--)...

    整数转二进制

    • 辗转相除法 最早写过
    • 位移操作

    位移操作

    整数在内存中就是以二进制数存的,实际上可以通过唯一操作来计算每一位的值。

    • 取出32位中第N(0<=N<=31)位的值 bit = value &( 1 << N )
    
    int Fuuu(int num) {
    
    	for (int i = 31; i >= 0; i--) {
    		printf("%d",(num & (1 << i)) == 0 ? 0 : 1);
    	}
    	return 0;
    }
    
    展开全文
  • 十进制转换为二进制并输出,本文仅讨论整数部分  方法:除2取余法,即每次将整数部分除以2,余数为该位权上的,而商继续除以2,余数又为上一个位权上的,这个步骤一 直持续下去,直到商为0为止;最后读时候...

    十进制转换为二进制并输出,本文仅讨论整数部分

      方法:除2取余法,即每次将整数部分除以2,余数为该位权上的数,而商继续除以2,余数又为上一个位权上的数,这个步骤一

    直持续下去,直到商为0为止;最后读数时候,从最后一个余数读起,一直到最前面的一个余数。
      下面举例:
      例:将十进制的168转换为二进制 
      得出结果 将十进制的168转换为二进制,(10101000)2 
      分析:

    第一步,将168除以2,商84,余数为0。
      第二步,将商84除以2,商42余数为0。
      第三步,将商42除以2,商21余数为0。 
      第四步,将商21除以2,商10余数为1。 
      第五步,将商10除以2,商5余数为0。 
      第六步,将商5除以2,商2余数为1。 
      第七步,将商2除以2,商1余数为0。 
      第八步,将商1除以2,商0余数为1。 
      第九步,读数,因为最后一位是经过多次除以2才得到的,因此它是最高位;
      读数字从最后的余数向前读,即1010100;算法如下:


    package binary;
    
    import java.util.Scanner;
    
    /**
     * 十进制转换为2进制并输出
     * @author Administrator
     *
     */
    public class IntegerToBinary
    {
    	private static StringBuilder mode;//存放二进制结果
    	
    	private int middle;//存放递归过程中的10进制数值
    	
    	public IntegerToBinary()
    	{
    		mode=new StringBuilder();
    		middle=0;
    	}
    	
    	public static void main(String[] args)
    	{
    		IntegerToBinary to=new IntegerToBinary();
    		Scanner scan=new Scanner(System.in);
    		while(scan.hasNextInt())
    		{
    			System.out.println(to.toBinaryString(scan.nextInt()));
    			mode.delete(0, mode.length());//清空StringBuilder
    		}
    		
    	}
    	
    	/**
    	 * 返回10进制整数转换得到的2进制字符串
    	 * 如整数5,得到二进制的"101"
    	 * @param i 需要转换为2进制的10进制整数
    	 * @return
    	 */
    	public String toBinaryString(int i)
    	{
    		this.toBinary(i);
    		return mode.toString();
    	}
    	
    	/**
    	 * 辗转相除,并对余数由最后得到1位余数向前进行拼接
    	 * @param i
    	 */
    	public void toBinary(int i)
    	{
    		if(i>=1)
    		{
    			middle=i/2;
    			this.toBinary(middle);//递归
    			mode.append(i%2);
    		}
    	}
    	
    }
    


    展开全文
  • 二进制的1101转化成十进制 1101(2)=1*2^0+0*2^1+1*2^2+1*2^3=1+0+4+8=13 转化成十进制要从右到左用二进制的每个去乘以2的相应次方 不过次方要从0开始十进制转二进制: 用2辗转相除至结果为1 将余数和最后的1...
  • 满意答案xrdnkj2013.10.17采纳率:40%等级:12已帮助:6780人/*看看吧*/#include #include #include #include #define MAX_LEN 40#define MAX_COUNT 20void main(){int count = 0;...printf("请输入个及...
  • 下面,就为你详细介绍,二进制数和十进制的整数部分、小数部分的相互转换。①二进制整数部分转十进制理论依据:从最后一位开始算(从右往左),依次列为第0、1、2...n位,即第n位的(0或1)乘以2的n次方。比如:...
  • 输入一个正整数(十进制),输出此整数对应的二进制数(用循环实现,但... 用辗转相除依次取余,直到商为0,获取逆序的余数序列就是对应的二进制数 用循环不用数组,因此,将按先得到的余数序列组成一个整数值, 再...
  • :辗转相除:我们一直给十进制除以2,知道商为0,再把所有的余数逆序写出即是改十进制对应的二进制数。 二、代码实现: package temptest; import java.lang.Math; import java.util.ArrayList; import java.util....
  • 数相除 2. 题目解析 基于朴素思想求商的话,可以一直让 x-y,当 x< y 时减法停止,相减的次数就是商。显然,这个可以描述为数学形式为 x-ky<x,k 即为商。当 k 非常大时,一步步减的时间复杂度就直接爆炸了...
  • 十进制转二进制: 用2辗转相除至结果为1 ,也就是说要至除2的余数为0 int Count(int x) { int icount = 0; while (x != 0 ) { icount ++; x = x & (x - 1); } }
  • 十进制转二进制无非相除取余,然后余数倒序输出,即为先进后出,应该使用栈。 代码: #include using namespace std; class Translate { int data; Translate *next, *top; public: Translate() { top = NULL; ...
  • 二进制数中1的个数

    2015-07-10 13:29:00
    要求:求二进制数中1的个数 解法1:除、余操作 最常见的方法:使用相除判断余数的方式来进行分析,若求模2 为1,则证明是1,求模2 为0,证明该二进制位置上面的0; /** * 计算二进制中1的个数 O(log2V) ...
  • 如何求二进制数中丁的个数 腾讯笔试 题目描述: 给定一个整数,输出这个整数的二进制表示中 l 的个数。例如 : 给定整数 7,其二进制表示为 111, 因此输出结果为 3。 方法一: 移位法 可以采用位操作来完成 。具体思路...
  • 题记:写这篇博客要主是加深自己对二进制数代码的认识和总结实现算法时的一些验经和训教,如果有错误请指出,万分感谢。 进制转换 这个问题比拟基本,也比拟简单,直接给出代码 每日一道理 心的本色该是如此。...
  • 本代码信息: 使用语言:java 功能:将整数(包括正负整数)转换成对应的二进制数,然后再控制台上显示。
  • 本文实例为大家分享了C++将十进制转为其它进制的具体代码,供大家参考,具体内容如下 一、思路:用辗转相除法 二、实现程序: #include using namespace std;... 请输入要转化的进制n(如二进制:2):; cin >> n
  • 十进制与二进制转换之相互算法 十进制转二进制: 用2辗转相除至结果为1 将余数和最后的1从下向上倒序写 就是结果 例如302 302/2 = 151 余0 151/2 = 75 余1 75/2 = 37 余1 37/2 = 18 余1 18/2 = 9 ...
  • 编程之美之二进制数中1的个数

    千次阅读 2014-01-24 20:01:05
    对于一个字节(8bit)的变量,求其二进制中1的个数,要求算法的执行效率尽可能的高。 例如把9表示成二进制是1001,有2位是1,因此如果输入9,1的个数为2。 解法一: 可以举一个8位二进制的例子。对于...
  • 对于一个字节(8bit)的无符号整型变量,求其二进制表示中“1”的个数。 笨方法: 对于二进制操作,除以一个2,原来的数字就会减少一个0.(可以类比十进制,十进制除以一个10,则相应会减少一个0) 如果除的...
  • 2.1求二进制数中1的个数

    千次阅读 2015-01-15 20:28:04
    2.1求二进制数中1的个数 题目: 对于一个字节(8bit)的无符号整型变量,求其中二进制表示中“1”的个数,要求算法的执行效率尽可能高。 解法一 对于二进制操作,除以一个2,原来的数字将会减少一个0。如果除的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 13,029
精华内容 5,211
关键字:

二进制数相除