C++实现十进制数转换为二进制数的数学算法

一、十进制转换为二进制的数学算法

设目标十进制数为n,用短除法一直除以2,循环这个过程并记录余数,当商为0时结束循环,余数从后往前读就是转换为的二进制数

eg:

二、代码实现

1.设计转换函数transfer

// flag是位数控制器,用remainder来暂时保存每一位余数,y是转换的二进制结果。我们的目标是把流程结束后的余数倒序输出 ,比如13的二进制数1101,但是每次除以2后得到的余数都是个位数,所以我选择使用一个位数控制器flag,从初始值1开始和remainder相乘,然后迭代(每次乘以十)进入下一次除以2的过程,然后每次迭代相加y就能得到二进制数1101(其实这个1101是用十进制显示的),而我们知道,当除数=0时就停止循环,所以我们设置If条件来控制结束
演示一遍具体的循环流程:

 eg:13(10)----1101(2):
  1. remainder=n%2=1; n=n/2=6; y=y+remainder*flag=0+1*1=1;flag=flag*10=10;
  2. remainder=n%2=0; n=n/2=3; y=y+reminder*flag=1+0*10=1;
flag=flag*10=100;
  4. remainder=n%2=1; n=n/2=1; y=y+reminder*flag=1+1*100=101;
flag=flag*10=1000;
  5. remainder=n%2=1; n=n/2=0;y=y+reminder*flag=101+1*1000=1101;
flag=flag*10=10000;
此时n=0,if(n==0)成立,停止循环,输出y。
int transfer(int n)
{
    int flag=1,y=0,remainder;
    while(1)
    {
        remainder=n%2;
        n/=2;
        y+= remainder*flag;
       flag*=10;
        if(n==0)
        {
            break;
        }
    }
    return y;
}

2.完整代码

代码如下(示例):

#include <cstdio>
#include<iostream>
using namespace std;
int a[1000001];
int main()
{
    int transfer(int n);
    int n,sum=0,y;
    scanf("%d",&n);
    y=transfer(n);
    printf("%d\n",y);
    return 0;
}
int transfer(int n)
{
    int flag=1,y=0,remainder;
    while(1)
    {
        remainder=x%2;
        n/=2;
        y+=remainder*flag;
        flag*=10;
        if(n==0)
        {
            break;
        }
    }
    return y;
}

总结

其实笼统来说,主要的思想就是从位数由低到高,把余数依次乘以1,10,100,1000再加起来就是用十进制的形式表示了转换后的二进制(1101=1乘1+0乘10+1乘100+1乘1000),需要注意的是位数控制器flag的使用。

以上就是C++实现十进制数转换为二进制数的数学算法的详细内容,更多关于C++十进制转二进制的资料请关注我们其它相关文章!

(0)

相关推荐

  • C++ 回调接口设计和二进制兼容详细

    目录 1.疑问 2.二进制兼容 3.编译环境 4.动态链接库 5.C++ 风格,虚函数接口例子 6.进一步讨论二进制兼容 7.C 风格的回调,如何做二进制兼容 1.疑问 我们在开发一个视频编辑 SDK.SDK 的回调接口设计成 C 风格,结构中放着一些函数指针 struct SKYMEDIA_API SkyEncodingCallback final { // PS: 为达到完全的二进制兼容,这里还应该有个 structSize 的字段.见最后一小节 void *userData = nullp

  • C++ 十进制转换为二进制的实例代码

    题目内容:将十进制整数转换成二进制数. 输入描述:输入数据中含有不多于50个的整数n(-231<n<231). 输出描述:对于每个n,以11位的宽度右对齐输入n值,然后输出"-->",再然后输出二进制数.每个整数n的输出,独立占一行. 题目分析:将某个数从十进制转为二进制的具体方法是,该数对2取余,结果要么为1要么为0,此为该数对应二进制的末位:然后该数除以二,得到的商再次对2取余,结果为对应二进制的倒数第二位--以此类推,知道除以2的结果为0. 参考代码: 复制代码

  • 详解C++编程中对二进制文件的读写操作

    二进制文件不是以ASCII代码存放数据的,它将内存中数据存储形式不加转换地传送到磁盘文件,因此它又称为内存数据的映像文件.因为文件中的信息不是字符数据,而是字节中的二进制形式的信息,因此它又称为字节文件. 对二进制文件的操作也需要先打开文件,用完后要关闭文件.在打开时要用ios::binary指定为以二进制形式传送和存储.二进制文件除了可以作为输入文件或输出文件外,还可以是既能输入又能输出的文件.这是和ASCII文件不同的地方. 用成员函数read和write读写二进制文件 对二进制文件的读写主

  • C++实现string存取二进制数据的方法

    本文实例讲述了C++实现string存取二进制数据的方法,分享给大家供大家参考.具体方法分析如下: 一般来说,STL的string很强大,用起来也感觉很舒服,这段时间在代码中涉及到了用string存取二进制数据的问题,这里记录一下,以供以后参考. 首先提一下STL中string的参考资料:http://www.cplusplus.com/reference/string/string/ ,不懂的朋友可以看下. 在数据传输中,二进制数据的buffer一般用系统预设的大数组进行存储,而不是STL的s

  • C++访问Redis的mset 二进制数据接口封装方案

    需求 C++中使用hiredis客户端接口访问redis: 需要使用mset一次设置多个二进制数据 以下给出三种封装实现方案: 简单拼接方案 在redis-cli中,mset的语法是这样的: 复制代码 代码如下: /opt/colin$./redis-cli mset a 11 b 22 c 333 OK 按照这样的语法拼接后,直接使用hiredis字符串接口redisCommand传递: void msetNotBinary(redisContext *c, const vector<stri

  • C/C++读写文本文件、二进制文件的方法

    一:目的 掌握C语言文本文件读写方式: 掌握C语言二进制文件读写方式: 掌握CPP文本文件读写方式: 掌握CPP二进制文件读写方式: 二:C语言文本文件读写 1. 文本文件写入 //采用C模式对Txt进行写出 void TxtWrite_Cmode() { //准备数据 int index[50] ; double x_pos[50], y_pos[50]; for(int i = 0; i < 50; i ++ ) { index[i] = i; x_pos[i] = rand()%1000

  • C++实现十进制数转换为二进制数的数学算法

    一.十进制转换为二进制的数学算法 设目标十进制数为n,用短除法一直除以2,循环这个过程并记录余数,当商为0时结束循环,余数从后往前读就是转换为的二进制数 eg: 二.代码实现 1.设计转换函数transfer // flag是位数控制器,用remainder来暂时保存每一位余数,y是转换的二进制结果.我们的目标是把流程结束后的余数倒序输出 ,比如13的二进制数1101,但是每次除以2后得到的余数都是个位数,所以我选择使用一个位数控制器flag,从初始值1开始和remainder相乘,然后迭代(每

  • Python如何把十进制数转换成ip地址

    需要把ip地址转换为10进制数,然后也可以把10进制数转化为ip地址,计算机ping这个十进制数可以ping通对应的ip地址,说明已经实现功能 代码如下 # 引用正则来三等分字符串 import re # 转换成二进制数 bi = "{0:b}".format(18223104) # 补齐32位 bi = "0"*(32-len(bi))+bi # 8个一组算出每8个数字的十进制,然后再加","分隔 ret_ip_string = '.'.joi

  • PHP中将ip地址转成十进制数的两种实用方法

    PHP中如何将ip地址转成十进制数呢?现在PHP中有很多时候都会用到ip地址,但是这个ip地址获取的时候都不是10进制的.那么PHP中如何将ip地址转成十进制数就是我们比较头疼的事情了,下面两种方法是我整理处理来相对比较简单的IP地址转成十进制数的方法.希望能对大家有所帮助. 方法一: 复制代码 代码如下: public function ipToLong(){ $ip = $_SERVER['REMOTE_ADDR']; $ip = explode('.', $ip); $ip = array

  • 易语言将十进制数值转换为八进制文本的方法

    取八进制文本命令 英文命令:oct 操作系统支持:Windows.Linux    所属类别:数值转换 返回一个文本,代表指定数值的八进制形式. 语法:  文本型  取八进制文本 (欲取进制文本的数值) 例程 说明 通过"取八进制文本"命令将一个十进制数值转换为八进制文本. 运行结果: 总结 以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持.如果你想了解更多相关内容请查看下面相关链接

  • 易语言将十进制数值转换为十六进制文本的方法

    取十六进制文本命令 英文命令:hex 操作系统支持:Windows.Linux    所属类别:数值转换 返回一个文本,代表指定数值的十六进制形式. 语法:  文本型  取十六进制文本 (欲取进制文本的数值) 例程 说明 通过"取十六进制文本"命令将一个十进制数值转换为十六进制文本. 运行结果: 总结 以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持.如果你想了解更多相关内容请查看下面相关链接

  • C++实现十进制数转为其它进制数

    本文实例为大家分享了C++将十进制数转为其它进制数的具体代码,供大家参考,具体内容如下 一.思路:用辗转相除法 二.实现程序: #include <iostream> using namespace std; const int MAXN = 100; int main(int argc, const char * argv[]) { int num, n, arr[MAXN], i; // num存储输入的数,n存储进制 i = 0; cout << "请输入一个正整数

  • 算法证明每一位都相同十进制数不是完全平方数

    目录 题意 Description 解题思路 证明 代码 题意 Description 相信大家都做过"A+B Problem"了吧,这道题是它的加强版. 输入两个整数 A , B ,表示 A 个 B,例如 3 , 6 表示 666 .你只需要把“A个B”开根号.如果开根号后是个整数,输出开根后的数,否则输出“We donot have SPJ!” 解题思路 很显然,这题就是让我们判断“A个B”是不是完全平方数,我们从感觉上判断,形如 666 ⋯ 666 这样的数,一般来说都不是完全平

  • python的数学算法函数及公式用法

    之前老是跟大家说看久了Python,总感觉就像是很多的数学公式运算,大家一致觉得只是一点点像,那今天跟大家直接就说下叫"数学"算法的内容,这样大家再来品鉴下,是不是可以贯通使用的内容呢?话不多说了,一起来了解下吧~ 数学运算方法 除了上面的基础算术运算符,还支持很多数值类型的运算符,例如:取反(~).位移(>>).位与(&).位异或(^).逻辑与(and).逻辑或(or). 除此之外,还有几个python的内置数学函数: pow():求幂 abs():求绝对值 ro

  • 十进制与BCD码转换的算法详解

    目录 BCD码 算法原理 总结 手头上在做的项目需要用到ds1302实时时钟,ds1302读出来的数据是BCD码,需要转换,写入也是. BCD码 BCD是指用二进制来表示十进制数的编码,即用4位二进制来表示一位十进制数,因此4位二进制数表示最大的十进制数9(1001),只取十六个数中的十个数. 比如: BCD码:0x99(153),该BCD码转换成十进制是99. 算法原理 十进制是逢十进一,而十六进制是逢十六进一,它们之间的每次进位差 6 6 ,所以一个十进制数要转换成BCD码,要先算清多进位的

  • 使用python实现两数之和的画解算法

    题目描述 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标. 你可以假设每种输入只会对应一个答案.但是,数组中同一个元素在答案里不能重复出现. 你可以按任意顺序返回答案. 示例 1: 输入:nums = [2,7,11,15], target = 9 输出:[0,1] 解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] . 示例 2: 输入:nums = [3,2,4],

随机推荐