1、為了完成進(jìn)制的轉(zhuǎn)換,在主函數(shù)中聲明了個(gè)函數(shù)Sum,主要用于將二進(jìn)制的每一位轉(zhuǎn)換為十進(jìn)制后的數(shù)相加,返回值就是相加后的和。另外定義了一個(gè)數(shù)組array[8],用于存放輸入的八位二進(jìn)制數(shù)。
創(chuàng)新互聯(lián)公司堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站制作、成都做網(wǎng)站、外貿(mào)營(yíng)銷網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的大祥網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
2、然后使用了一個(gè)for循環(huán)語句,用于輸入八位二進(jìn)制數(shù)。在scanf函數(shù)里,在%d之間加了一個(gè)1,即%1d,這樣是好連續(xù)的輸入八個(gè)數(shù),如果沒有中間的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)用庫函數(shù)pow,但是老師要求不調(diào)用庫函數(shù),因此就自己寫了一個(gè)求2的n次方的函數(shù),在這里n為指數(shù),term為每一位數(shù)轉(zhuǎn)換為十進(jìn)制后的的數(shù),如1*(2*2),sum為總和。
4、接著,使用了一個(gè)for循環(huán)語句,i用于控制循環(huán)的次數(shù),n從最高的指數(shù)7開始每次循環(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ù),有疑問的可以用筆算算乘2的個(gè)數(shù)對(duì)不對(duì),最后將i返回。
6、最后看一下運(yùn)行的結(jié)果。
方案一:
#includestdio.h#includemath.h#includestring.hint main(){char s[50];scanf("%s",s);int t=strlen(s);long sum=0;for(int i=0;it;i++){if(s[i]='A' s[i]='Z')s[i]=int(s[i]-'A')+10+'0';sum+=((s[i]-'0')*(pow(16,t-1-i)));}printf("%ld\n",sum);}
方案二:
#includestdio.hint main(){char s[50];scanf("%s",s);int t;long sum=0;for(int i=0;s[i];i++){if(s[i]='9')t=s[i]-'0';elset=s[i]-'A'+10;sum=sum*16+t;}printf("%ld\n",sum);return 0;}
辦法很多,提供三種供參考。
一、直接使用庫函數(shù)atoi將數(shù)字字符串轉(zhuǎn)換成十進(jìn)制整數(shù)。代碼如下:
#include?"stdio.h"
#include?"stdlib.h"http://調(diào)用庫函數(shù)atoi要包含這個(gè)文件
int?main(int?argc,char?*argv[]){
char?a[]="478167831";
printf("%d\n",atoi(a));//直接調(diào)用atoi將a轉(zhuǎn)換為十進(jìn)制整數(shù)
return?0;
}
二、用庫函數(shù)sscanf直接將數(shù)組中的數(shù)字字符串讀入十進(jìn)制整型變量。代碼如下:
#include?"stdio.h"
int?main(int?argc,char?*argv[]){
char?a[]="478167831";
int?x;
sscanf(a,"%d",x);//調(diào)用sscanf,讀入時(shí)自動(dòng)轉(zhuǎn)換為int型并由%d控制以十進(jìn)制賦給變量x
printf("%d\n",x);//輸出
return?0;
}
三、自行編寫轉(zhuǎn)換代碼:
#include?"stdio.h"
int?main(int?argc,char?*argv[]){
char?a[]="478167831";
int?x,i;
for(x=i=0;a[i];(x*=10)+=a[i++]-'0');//字符與數(shù)字的關(guān)系是"字符值-'0'==同名數(shù)字"
printf("%d\n",x);//輸出
return?0;
}
上述三代碼的輸出結(jié)果如下圖:
最簡(jiǎn)單的使用scanf()函數(shù)和printf()函數(shù)進(jìn)行格式轉(zhuǎn)換,以16進(jìn)制格式輸入,再以10進(jìn)制格式輸出。
程序代碼如下:
#includestdio.h
int main()
{
int a=0;
int i=0;
scanf("%x",a);
printf("%d",a);
return 0;
}
運(yùn)行結(jié)果:
擴(kuò)展資料:
scanf函數(shù)與printf函數(shù)的用法很像,都是以格式化的形式進(jìn)行操作,例如上述程序中scanf("%x", a);就是將輸入數(shù)據(jù)以十六進(jìn)制格式存儲(chǔ)到變量a中。
"%x"是將字符串A23CD以十六進(jìn)制形式輸入a中,如果將"%x"換成為"%d"的話,就是將字符串A23CD以十進(jìn)制形式輸入a中,這顯然是錯(cuò)誤的,因?yàn)閷23CD轉(zhuǎn)換為十進(jìn)制的時(shí)候,無法解析A,CD等字符,所以得出的結(jié)果就是錯(cuò)誤的。
將二進(jìn)制轉(zhuǎn)成十進(jìn)制,按權(quán)值展開求和即可。
可以通過以下代碼解決:
#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ù)通過除2取余法,得到二進(jìn)制數(shù),對(duì)每個(gè)八進(jìn)制為3個(gè)二進(jìn)制,不足時(shí)在最左邊補(bǔ)零。
十六進(jìn)制轉(zhuǎn)二進(jìn)制:十六進(jìn)制數(shù)通過除2取余法,得到二進(jìn)制數(shù),對(duì)每個(gè)十六進(jìn)制為4個(gè)二進(jìn)制,不足時(shí)在最左邊補(bǔ)零。
負(fù)數(shù)的進(jìn)制轉(zhuǎn)換稍微有些不同。
先把負(fù)數(shù)寫為其補(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é)果按從下往上的順序書寫就是:177767,那么177767就是十進(jìn)制數(shù)-9的八進(jìn)制形式。
其實(shí)轉(zhuǎn)化成任意進(jìn)制都是一樣的。
參考資料:
二進(jìn)制——百度百科
十進(jìn)制——百度百科