插一句:昨天做的“剪刀石头布”忘掉了双方出同一种(即平局)的可能。只需在原有的if …else语句之中再内嵌一个if就好。

正文

原题:输出一张数表,内容是1~126各个数字的十进制,二进制,八进制,十六进制。
初生牛犊啊。。第一反应是:这个计算机应该会自己做吧?我用那什么叫啥来着。。格式控制符就好了吧?

一翻书,格式控制符有是有。。只有十进制(dec),八进制(oct),十六进制(hex)。没有二进制,考虑到二进制的英文单词(binary)。。1.鸡贼一下,不会是有bin没写出来吧??
2.而且,这个控制符可以实现直接将十进制数按我想要的格式输出吗?

尝试了一下,对于书上给出的三种控制符,只要有个数,都可以直接通过编程时写进来实现各种数制的输出。

    int a;cout<<dec<<a<<endl;cout<<oct<<a<<endl;cout<<hex<<a<<endl;

而臆想出来的bin。。也显然不存在,果断在编译的时候就会报错。
问题到这里已经解决了3/4。但剩下的那1/4现在才是重要的:

怎样把一个十进制数转变为二进制数输出?

这个问题,如果手动进行的话,思路明了,对任意的n除2做带余除法,逆向取余即可得其二进制数。
但初步考虑至少有两个问题难以解决:

  • 你怎么知道会做多少步呢?你不知道,就不好找一个合适的变量(或者说足够多的变量)来储存每步得到的余数
  • 怎么逆向输出这些存下来的数?

可以看出来。以上所谓初步考虑基于这样一个假设:按从后至前的顺序输出一串由多步带余除法之后得到的余数。
问天问地问自己:见过么?没见过。。学过么?没学过。。那怎么写。。?

问度娘,看了好几个版本,满篇不认识的函数。
瞎翻书。书上有个例题,是把二进制转换成十进制。它用的方式是按从右到左的顺序读取输入的一个二进制数的各位字符,将各位乘上对应的权重,然后累加,即有结果。
初看感觉对我的问题没什么启发,因为移位读取我不会用,其次移位读十进制数。。。别逗了。

但仔细想了想,那个累加好像可以解决刚才自己想到的问题。。
再稍微鸡贼下。。所谓逆向取余法。各个余数可是直接按数位排序,而不是加和啊。。
我难道非要用“二进制表示的数”来表示一个数的二进制吗?
如果我用十进制思维去表示呢?
逆向取余法有一个特点,最先得到的余数在最后的示数中是最低位。这样的话,如果用累加的方式,就很方便了。
如果我把每次得到的余数乘上一个如果它处在一个十进制数中该有的权重。再逐个累和。不就能的到一串1,0组合成的数字了吗?这串数字在计算机看来还是十进制数,因为它是由常规的十进制运算方式得到的,
它也不是一串仅仅由1,0按一定顺序排列得到的字符串(最先考虑的解决方案)。
它是个数字,是个人看来可以理解为二进制的东西。

talk is cheap,show me the code..


这里为了达到每一步都清晰的效果,最大程度地碎化了各个步骤,并且毫不考虑变量的数量。(此举使学长hin不爽。。)
思路确定之后写的时候感觉前几天写循环语句时积累的经验十分有用,比如,各语句该放的先后顺序,选择合适的计数器以及循环判断条件。。etc。

运行结果很棒。

但我们还是不能忘初心的对吧。原题还是要组合起来解决掉。
其实现在剩下的问题也就是选一个循环结构,然后把几个语句的顺序做调整(就像扯线子拧螺丝把几台设备连接起来调试一样)
原码:

#include<iostream>
using namespace std;
int main()
{cout<<"decimal"<<'\t'<<'\t'<<"binary"<<'\t'<<'\t'<<"cotal"<<'\t'<<'\t'<<"hexadecimal"<<endl;int d;int n,m,s,t,q,x; //光为了计算这个二进制数,就定义了5个变量。 for(d=1;d<=126;d++){s=0;t=1;n=d;//还记得第一次用累加器的时候给初值时它的位置吧? do{m=n%2;x=n/2;q=m*t;//t是以10为阶的示数权重 s=s+q;//s充当累加器 t=t*10;n=x;}while(x>0);cout<<dec<<d<<'\t'<<'\t'<<s<<'\t'<<'\t'<<oct<<d<<'\t'<<'\t'<<hex<<d<<endl;}
}

因为内容的多。。这次成了有史以来写过的最胖的代码。。看着很充实{笑哭。。}
留张图吧:

P.S:
有感:

  • 编程真正难的地方根本不是编程语言自己要求的语法,书写规范这类东西。而是,你怎么把一个问题抽象出来,用合适的方式表示它,合适的模型描述它,怎么考虑各种不同情况,并把他们用一个合适的结构组合起来,各部放在该有的位置,让其不会出错。这里有时候你会引入很多在原问题里看不出来的量(比如为配合while判断语句时)。我想这才是所谓的编程能力和它对人的思维的锻炼所在。
  • 在作出这个东西之前,我作出过其他几个东西,在作出那些东西之前,我觉得这个东西好难,没思路,但思考一会,尝试几次,修改几回。自己也能作出想要的结果。但这次的困难让自己觉得无法克服(特别是百度了几种发现完全看不懂之后),让自己觉得这个凭自己现在的知识能力不可能完成,这不是借口吧?这是事实哎。。我没学过。但硬着头皮做下去之后,发现也能成了。并不是说我自己有多厉害。而是说:对待自己初次遇到的,看不出思路的问题,别那么快放弃。坚持一会,或许就成了。

这是我学习编程两周后的感触,存在这里。

171023—各进制数输出:二进制转换用格式控制符输出八,十,十六进制数相关推荐

  1. 超详细介绍!!!带你认识各种进制数的及其转换以及原码,反码,补码

    1.本文详细介绍了二进制,八进制,八进制和他们之间的相互转换 2.也详细介绍了原码,反码,补码以及它们之间的相互转换,让你更加了解计算机数据的底层运行逻辑 目录 一:认识各种进制数 1.十进制数 2. ...

  2. 各种进制数之间的转换

    计算机中各种进制数之间的转换 各种进制之间的转化都可以通过二进制为桥梁 二进制之间整数的转换 示例1:二进制数1100转化为各种进制数 1100转化成十进制数 ​ 1100 = 1*23+1*22+0 ...

  3. 计算机不同进制数之间的转换,计算机进制数之间的转换002

    不错 除以16取余和倍数 如: (120)10 120/16 =8 ...8(余8) 8(余数8)/16=0 (8) (120)10 =(88)16 回答人的补充 2009-08-14 09:42 计 ...

  4. MFC中将用户输入的表示16进制数的字符串转换成16进制数输出显示(包含1.wstring转成string的方法函数2.用boost库拆分字符串的函数3.字符转16进制数值的函数)

    前期准备: 1.电脑中安装好boost库,我的电脑中安装在C盘根目录下,如下图所示: 2.配置好boost环境变量,如下图所示: 3.开发环境VS2015,工程为MFC应用程序 需要的头文件如下: # ...

  5. 不同进制数之间的转换

    一.都有哪些进制? ①二进制: 只有0.1两个数字,以0b开头; ②八进制: 0.1.2.3.4.5.6.7,以0开头; ③十进制: 0.1.2.3.4.5.6.7.8.9 ④十六进制: 0.1.2. ...

  6. 彻底明白各进制数之间的转换

    进制之间的转换是很基础的知识,为了清晰.简单.易懂的弄清楚这方面,所以我才写这篇文章的念头,希望能让你再也不用担心.害怕进制之间的转换了. 二进制 二进制是计算技术中广泛采用的一种数制.二进制数据是用 ...

  7. 我愿称之为最强归纳—浮点数的规格化与进制数之间的转换

    一.十进制数按照阶码用移码表示,尾数用补码表示进行规格化 (1)将十进制数转化为二进制 (2)写成1.0或者0.1*2^n的表达式 (3)阶码E(移码)=n(阶码真值)+2^m(偏移量) (m代表阶码 ...

  8. 任意进制数之间的转换

    #include <stdio.h> #include <string.h> #include <math.h> /*该函数可以实现小于整型数据的任意进制之间转换* ...

  9. 16进制数和10进制数之间的转换

    1.16进制转10进制数 parseInt(string, radix) 解析一个字符串并返回指定基数的十进制整数,radix 是 2-36 之间的整数,表示被解析字符串的基数. //将10这个字符指 ...

最新文章

  1. 对某课程的建议和意见_2021年河南专升本专科专业对照和考试课程征求意见
  2. ios应用的分发和上传
  3. cout、cerr、clog
  4. c调用按钮点击事件_React中事件的写法总结
  5. java应该学的基础东西
  6. 如何采用设置标志的方法来区分循环队列的满和空
  7. 2场直播丨CloudQuery最佳实践,
  8. lucene(全文搜索)_建立索引_根据关键字全文搜索_源码下载
  9. FunTester框架Redis性能测试之list操作
  10. 线性代数【二】:矩阵的概念与计算
  11. html5集成远程控制,HP MicroServer Gen8 ILO4官方固件2.70安装及中文设置,远程控制台新增支持html5...
  12. 学习信息安全技术心得
  13. 大图书馆 #2 大教堂与集市
  14. 可偏导不一定连续的例子
  15. linux文件内容乱码怎么解决,window到linux文件名乱码和文件内容乱码解决总结
  16. LPC1768 IAP写入bin格式程序不能启动的解决办法
  17. shell关闭占用某端口应用,并重启
  18. Niushop 分销推广员管理
  19. 射击游戏c语言源码,射击游戏 (C++代码)
  20. Oracle的新特性Recyclebin回收站

热门文章

  1. Linux 网络设备驱动(dm9000)
  2. 网站底部的统计代码HTML
  3. Android滑动头部控件
  4. react+Ts+批量上传华为云OBS
  5. Futuremark 3DMark 2.17.7137,3DMark兼容性强大
  6. 深度调查:内耗不止,Sushiswap内部究竟发生了什么?|链捕手
  7. 短视频应用应该如何打造技术架构?
  8. 财报识别OCR披露虚假财务报表
  9. 纯CSS实现淘宝天猫优惠券效果
  10. 萃聚는 分散中의 統合