#include?stdio.h

成都創(chuàng)新互聯(lián)長(zhǎng)期為數(shù)千家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開(kāi)放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為巴里坤哈薩克企業(yè)提供專業(yè)的成都網(wǎng)站制作、做網(wǎng)站,巴里坤哈薩克網(wǎng)站改版等技術(shù)服務(wù)。擁有十載豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開(kāi)發(fā)。
double?b2d(char?*s);
int?main(void)?
{
char?s[100];
while(gets(s))
{
fflush(stdin);
printf("%.0lf\n",b2d(s));
}
return?0;
}
double?b2d(char?*s)
{
double?n;
for(n=0;*s;++s)
{
n=n*2+*s-'0';
}
return?n;
}
1、為了完成進(jìn)制的轉(zhuǎn)換,在主函數(shù)中聲明了個(gè)函數(shù)Sum,主要用于將二進(jìn)制的每一位轉(zhuǎn)換為十進(jìn)制后的數(shù)相加,返回值就是相加后的和。另外定義了一個(gè)數(shù)組array[8],用于存放輸入的八位二進(jìn)制數(shù)。
2、然后使用了一個(gè)for循環(huán)語(yǔ)句,用于輸入八位二進(jìn)制數(shù)。在scanf函數(shù)里,在%d之間加了一個(gè)1,即%1d,這樣是好連續(xù)的輸入八個(gè)數(shù),如果沒(méi)有中間的1,則編譯器會(huì)認(rèn)為你只輸入了一個(gè)數(shù),即那個(gè)八位數(shù)。然后使用printf函數(shù)輸出,并且調(diào)用Sum函數(shù),數(shù)組名作為實(shí)參。
3、在Sum函數(shù)中,又聲明了一個(gè)power函數(shù),power函數(shù)的作用是求2的n次方,其實(shí)這里可以調(diào)用庫(kù)函數(shù)pow,但是老師要求不調(diào)用庫(kù)函數(shù),因此就自己寫(xiě)了一個(gè)求2的n次方的函數(shù),在這里n為指數(shù),term為每一位數(shù)轉(zhuǎn)換為十進(jìn)制后的的數(shù),如1*(2*2),sum為總和。
4、接著,使用了一個(gè)for循環(huán)語(yǔ)句,i用于控制循環(huán)的次數(shù),n從最高的指數(shù)7開(kāi)始每次循環(huán)減一,如果指數(shù)大于或等于零的,就進(jìn)行循環(huán),因?yàn)槎M(jìn)制的最后一位轉(zhuǎn)換為十進(jìn)制數(shù)時(shí)指數(shù)就是零,此后循環(huán)就結(jié)束。調(diào)用power函數(shù)時(shí),將n作為實(shí)參,最后將和返回,即將sum作為返回值返回給Sum函數(shù)。
5、在power函數(shù)中,如果b等于零,即指數(shù)為零,則返回1,否則就進(jìn)入一個(gè)循環(huán),j用于控制循環(huán)次數(shù),有疑問(wèn)的可以用筆算算乘2的個(gè)數(shù)對(duì)不對(duì),最后將i返回。
6、最后看一下運(yùn)行的結(jié)果。
將二進(jìn)制轉(zhuǎn)成十進(jìn)制,按權(quán)值展開(kāi)求和即可。
可以通過(guò)以下代碼解決:
#include stdio.h
#include stdlib.h
int main()
{
char a[17];
gets(a);
int len,i,sum=0,m,j;
len=strlen(a);
if(len=16)
{
for(i=0;ilen;i++)
{
m=1;
if(a[i]=='1')
{
for(j=1;j=len-i-1;j++)
m*=2;
sum+=m;
}
}
printf("%d",sum);
}
return 0;
}
擴(kuò)展資料:
我們常用的進(jìn)制包括:二進(jìn)制、八進(jìn)制、十進(jìn)制與十六進(jìn)制,它們之間區(qū)別在于數(shù)運(yùn)算時(shí)是逢幾進(jìn)一位。比如二進(jìn)制是逢2進(jìn)一位,十進(jìn)制也就是我們常用的0-9是逢10進(jìn)一位。
十進(jìn)制轉(zhuǎn)二進(jìn)制:十進(jìn)制數(shù)除2取余法,即十進(jìn)制數(shù)除2,余數(shù)為權(quán)位上的數(shù),得到的商值繼續(xù)除2,依此步驟繼續(xù)向下運(yùn)算直到商為0為止。
八進(jìn)制轉(zhuǎn)二進(jìn)制:八進(jìn)制數(shù)通過(guò)除2取余法,得到二進(jìn)制數(shù),對(duì)每個(gè)八進(jìn)制為3個(gè)二進(jìn)制,不足時(shí)在最左邊補(bǔ)零。
十六進(jìn)制轉(zhuǎn)二進(jìn)制:十六進(jìn)制數(shù)通過(guò)除2取余法,得到二進(jìn)制數(shù),對(duì)每個(gè)十六進(jìn)制為4個(gè)二進(jìn)制,不足時(shí)在最左邊補(bǔ)零。
負(fù)數(shù)的進(jìn)制轉(zhuǎn)換稍微有些不同。
先把負(fù)數(shù)寫(xiě)為其補(bǔ)碼形式(在此不議),然后再根據(jù)二進(jìn)制轉(zhuǎn)換其它進(jìn)制的方法進(jìn)行。
例:要求把-9轉(zhuǎn)換為八進(jìn)制形式。則有:
-9的補(bǔ)碼為1111 1111 1111 0111。從后往前三位一劃,不足三位的加0
111----7
110----6
111----7
111----7
111----7
001----1
然后我們將結(jié)果按從下往上的順序書(shū)寫(xiě)就是:177767,那么177767就是十進(jìn)制數(shù)-9的八進(jìn)制形式。
其實(shí)轉(zhuǎn)化成任意進(jìn)制都是一樣的。
參考資料:
二進(jìn)制——百度百科
十進(jìn)制——百度百科
分享文章:c語(yǔ)言編寫(xiě)二進(jìn)制轉(zhuǎn)換函數(shù),c++轉(zhuǎn)二進(jìn)制函數(shù)
文章路徑:http://chinadenli.net/article20/dseipco.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、網(wǎng)站設(shè)計(jì)、微信小程序、定制網(wǎng)站、網(wǎng)頁(yè)設(shè)計(jì)公司、定制開(kāi)發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)