从易到难编写C++程序,(2)个人解答:把键盘输入的16,10,8进制数转换为2进制输出。...

本文介绍了一个使用C++编写的程序,该程序能够将用户输入的16、10或8进制数值转换为2进制形式并输出。通过使用C++标准库中的bitset、iostream等功能,程序实现了不同进制之间的转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/*Copyright (c) 2007,九天雁翎

* All rights reserved.

* 从易到难编写C++程序,(2)问题:把键盘输入的16108进制数转换为2进制输出。

* 完成日期:<chsdate w:st="on" isrocdate="False" islunardate="False" day="9" month="6" year="2007"><span lang="EN-US"><font face="Times New Roman">2007</font></span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">年</span><span lang="EN-US"><font face="Times New Roman">6</font></span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">月</span><span lang="EN-US"><font face="Times New Roman">9</font></span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'">日</span></chsdate>*/

#include "stdafx.h"

#include <iostream>

#include <string>

#include <cstdlib>

#include <bitset>

#include <iomanip>

#include <cassert>

#include <limits>

using namespace std;

const size_t MAXLENGTH = numeric_limits<long>::digits; //定义MAXLENGTH为可保存long的二进制位数

int main()

{

long inlong; //输入

int format;

cout<<"Please choose the number type you want to input(1-Oct,2-Dec,3-Hex):"; //这里顺序由小到大,不知道合理不

cin>>format;

assert( format == 1 || format == 2 || format == 3 ); //假如有不听话的用户,断言错误,呵呵

cout<<"Please input the number to be transformed:";

if(format == 1)

{

cin>>oct>>inlong; //利用iostream转换成进制避免了用c的库函数

}

else if(format == 2)

{

cin>>dec>>inlong;

}

else if(format == 3)

{

cin>>hex>>inlong; //利用iostream转换进制避免了用c的库函数

}

//这种方法我发现一个很明显的缺点,那就是没有办法判断输入是否正确

//也许是我的知识匮乏,希望有高手指点,怎么在这种情况判断输入时是否合乎逻辑

//比如进制就不能出现,等的情况

bitset<MAXLENGTH> abit(inlong); //利用bitset的构造函数完成进制到进制的转换

cout<<"The binary number is:"<<endl;

for(size_t i = MAXLENGTH; i != 0; --i) //因为是bitset类型,所以输出是反的,有点奇怪

{

if( (i % 8 == 0) && i != MAXLENGTH)

{

cout<<" ";

}

cout<<abit[i-1]; //会发现只有位,因为第一位是符号位啊

}

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值