Cracking the Coding Interview 5.2

Given a(decimal -e.g. 3.72)number that is passed in as a string, print the binary representation. If the number can not be represented accurately in binary, print "ERROR"

?

整數部分:

? ? 對2取余,然后向右移動一位,重復直到整數部分變為0

小數部分:

? ? 乘以2,看結果是否大于1,大于1則2^-1位上位1,否則為0。如果大于1,將結果減1再乘以2,否則直接乘以2,繼續判斷,直到小數部分超過32位,返回ERROR

? ? 例如:0.75d = 0.11b,乘以2實際上相當于左移,結果大于1,則說明2^-1位上是1,然后減1,繼續乘以2,結果等于1,說明2^-2上是1,且后面沒有小數了。

#include<iostream>
#include<string>
#include<stdlib.h>
using namespace std;string func(const string &str)
{string strInt;string strDou;string::size_type idx = str.find('.');    if(idx == string::npos){strInt = str;}else{strInt = str.substr(0,idx);strDou = str.substr(idx);}int intPart = atoi(strInt.c_str());double douPart;if(!strDou.empty()){douPart = atof(strDou.c_str());}else{douPart = 0.0;}string strIntB,strDouB;while(intPart!=0){if((intPart&1)>0){strIntB = '1'+strIntB;}else{strIntB = '0'+strIntB;}intPart=intPart>>1;}while(!(douPart>-10e-15 && douPart<10e-15)){if(douPart*2>1){strDouB = '1'+strDouB;douPart = douPart*2-1;}else if((douPart*2-1)>-10e-15 && (douPart*2-1)<10e-15){strDouB = '1'+strDouB;break;}else{strDouB = '0'+strDouB;}if(strDouB.size()>32){return "ERROR";}}if(strDouB.empty()){return strIntB;}else{return (strIntB+'.'+strDouB);}
}int main()
{string str("3.75");cout<<func(str)<<endl;return 0;
}

?

轉載于:https://www.cnblogs.com/johnsblog/p/3923016.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/260108.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/260108.shtml
英文地址,請注明出處:http://en.pswp.cn/news/260108.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python的render函數_帶函數return的Flask render_模板

TL&#xff1b;DR在這種情況下&#xff0c;我想我會選擇使用我現在的4個選項我將介紹4種選擇&#xff0c;其中一些可能比其他更可行。在如果您擔心execute表示的代碼存在代碼重復(DRY)&#xff0c;您可以簡單地定義一個兩個路由都可以調用的函數&#xff1a;def execute():# ex…

Google開源Leak Finder——用于檢測內存泄漏的JavaScript工具

近日&#xff0c;Google開源了Leak Finder&#xff0c;這款工具可以查看JavaScript應用的堆&#xff0c;進而發現內存泄漏。 作為一門垃圾收集語言&#xff0c;JavaScript并不會出現常見的內存泄露情況&#xff0c;特別是像C等語言中所見到的那種。但如果依舊將內存分配給那些不…

linux 定時訪問文件夾,Linux定時同步文件夾

-v, --verbose 詳細模式輸出-q, --quiet 精簡輸出模式-c, --checksum 打開校驗開關&#xff0c;強制對文件傳輸進行校驗-a, --archive 歸檔模式&#xff0c;表示以遞歸方式傳輸文件&#xff0c;并保持所有文件屬性&#xff0c;等于-rlptgoD-r, --recursive 對子目錄以遞歸模式處…

windows apache 開啟 GZIP

從服務端優化來說&#xff0c;通過對服務端做壓縮配置可以大大減小文本文件的體積&#xff0c;從而使加載文本的速度成倍的加快。目前比較通用的壓縮方法是啟用gzip壓縮。它 會把瀏覽器請求的頁面&#xff0c;以及頁面中引用的靜態資源以壓縮包的形式發送到客戶端,然后在客戶端…

python必備插件_5框酷斃的python插件工具

展開全部工欲善其事必先利其器&#xff0c;一個好的工具能讓起到事半功倍32313133353236313431303231363533e59b9ee7ad9431333433646531的效果&#xff0c;Python社區提供了足夠多的優秀工具來幫助開發者更方便的實現某些想法&#xff0c;下面這幾個工具給我的工作也帶來了很多…

Bootstrap3 排版-改變大小寫

通過這幾個類可以改變文本的大小寫。 <p class"text-lowercase">Lowercased text.</p> <p class"text-uppercase">Uppercased text.</p> <p class"text-capitalize">Capitalized text.</p> —–下面有個“頂…

linux系統如何調屏幕亮度,Linux入門教程:Ubuntu筆記本屏幕亮度調節

前天入手一臺Dell筆記本&#xff0c;i7第五代處理器&#xff0c;8G內存&#xff0c;1T硬盤&#xff0c;很符合我對移動工作站的要求。今天果斷將正版win8替換為Ubuntu&#xff0c;DIY的后果就是原來3秒啟動系統變成了現在15秒&#xff0c;忍了。但是另一個問題十分困擾我&#…

Centos7 更新pip和scipy

更新pip&#xff1a; pip install --upgrade pip 更新scipy包&#xff1a; pip install -upgrade scipy 轉載于:https://www.cnblogs.com/leewhite/p/6098211.html

poj 3258 River Hopscotch 【二分】

題目真是不好讀&#xff0c;大意例如以下&#xff08;知道題意就非常好解了&#xff09; 大致題意&#xff1a; 一條河長度為 L&#xff0c;河的起點(Start)和終點(End)分別有2塊石頭&#xff0c;S到E的距離就是L。 河中有n塊石頭&#xff0c;每塊石頭到S都有唯一的距離 問如今…

python的socks5全局代理_Python寫的Socks5協議代理服務器

直接上代碼&#xff1a;#!/usr/bin/python# Filename s5.py# Python Dynamic Socks5 Proxy# Usage: python s5.py 1080# Background Run: nohup python s5.py 1080 &import socket, sys, select, SocketServer, struct, timeclass ThreadingTCPServer(SocketServer.Threadi…

Zencart 給DHL運費模塊增加一個分區的方法

Zencart 給DHL運費模塊增加一個分區的方法 zencart給DHL運費模塊添加一個分區的方法很簡單&#xff0c;因爲該模塊已經做好了允許用戶添加更多分區的設置。 具體方法如下&#xff1a; 首先打開該運費模塊&#xff08;includes\modules\shipping\dhlzones.php 文件&#xff09;&…

linux 如何查看終端格式,你應該還不知道,Linux終端下的 Markdown 文檔查看器

原標題&#xff1a;你應該還不知道&#xff0c;Linux終端下的 Markdown 文檔查看器現在&#xff0c;Markdown 差不多已經成為技術文檔的標準。它可以實現技術文檔的快捷寫作&#xff0c;以及輸出發布。同樣都是標記語言&#xff0c;但Markdown 文檔相比HTML更加簡單。一是體現在…

更換硬盤

更換硬盤 1. 根據管理平臺的信息&#xff0c;找到損壞磁盤的位置 2. 取下壞盤&#xff0c;對比新盤的PN號 3. 將新的硬盤插回到磁盤柜 4. vol status -s 查看Spare Disks信息 &#xff0c;找到識別碼&#xff0c;例如4a.05.15 5. disk assign 4…

Android之 Fragment

什么是Fragment&#xff1a; Android是在Android 3.0 (API level 11)開始引入Fragment的。 可以把Fragment想成Activity中的模塊&#xff0c;這個模塊有自己的布局&#xff0c;有自己的生命周期&#xff0c;單獨處理自己的輸入&#xff0c;在Activity運行的時候可以加載或者移除…

怎么用python檢索法律_法律人,你的檢索與處理信息的方式,決定了你的專業程度...

昨天在后臺收到一位讀者留言&#xff1a;“我花了2天時間到各法院官網、法律數據庫網站、裁判文書及判例網站上搜索近十年我國經濟類犯罪案例。好不容易將案件手動分類&#xff0c;整理判例的定罪和量刑情況給當前的案子作參考&#xff0c;現在看到了結論&#xff0c;也不敢確定…

HDU1753: 大明A+B

大明AB Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 5533 Accepted Submission(s): 1870 Problem Description話說&#xff0c;經過了漫長的一個多月&#xff0c;小明已經成長了許多&#xff0c;所以他改了…

倒戈了,轉投簡書 --------

深情自白 還記得數月前那個月黑風高的晚上&#xff0c;筆主偶遇簡書&#xff0c;被那婀娜多姿的Markdown輸出深深吸引不能自拔&#xff0c;從此立下毒誓要兩邊同時發布。然而天有不測風云&#xff08;這邊的太丑&#xff09;&#xff0c;前思后想寢食難安之后作出決定&#xff…

如何通過windows控制linux,如何從Windows遠程控制Linux | MOS86

ifconfig將顯示您需要連接的IP地址。 如果Linux盒具有以太網連接&#xff0c;則該地址將在eth0旁邊列出。 如果以無線方式連接&#xff0c;請查找針對wlan0列出的IP地址。如果這不容易或不方便&#xff0c;則有另一種方法幾乎同樣簡單。 在瀏覽器窗口中&#xff0c;連接到路由器…

簡明Vim練級攻略(初學者)

http://blog.jobbole.com/18339/轉載于:https://www.cnblogs.com/sherry00/p/3931023.html

安卓psp模擬器聯機教程_刺激戰場國際服下載方法教程!安卓ios模擬器都有

刺激戰場國際服不需要VPN&#xff0c;不需要加速器。刺激戰場國際服賬號可以使用微信登入&#xff0c;進游戲頁面點擊more就可以了。安卓系統&#xff1a;①下載網易UU加速器&#xff0c;通過網易UU加速器平臺直接下載。②有的機型不能通過網易UU下載&#xff0c;但是可以通過Q…