#include stdio.h
10年積累的網(wǎng)站建設(shè)、成都網(wǎng)站建設(shè)經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問(wèn)題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站制作后付款的網(wǎng)站建設(shè)流程,更有大悟免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
#include stdlib.h
int Math(int n)//這個(gè)是用來(lái)算二進(jìn)制每一個(gè)位置上的數(shù)字所標(biāo)示的實(shí)際值。例如:1001:第一個(gè)“1“ 表示8
{
int i,sum=1;
for(i=0;in;i++)
{
sum= sum*2;
}
return sum;
}
int judge(int n)//傳進(jìn)來(lái)的數(shù)值是二進(jìn)制,但是他實(shí)際是十進(jìn)制數(shù),只不過(guò)只有1和0組成,
{
int sum=0,k=0;
while(n!=0)
{
int m=n%10;//獲取每個(gè)位置的數(shù)字
sum=sum+m*Math(k);//求和
n=n/10;
k++;//用來(lái)表示第幾個(gè)位置
}
return sum;
}
int main()
{
int m;
scanf("%d",m);
printf("%d\n",judge(m));
return 0;
}
自己寫的,有什么問(wèn)題一起討論!thanks!
根據(jù)評(píng)論要求,改進(jìn)代碼:
1、函數(shù)getBCode是題目要的遞歸函數(shù),實(shí)現(xiàn)轉(zhuǎn)二進(jìn)制(最高位是符號(hào)位)。
思路是十進(jìn)制數(shù)絕對(duì)值除以2求余,得到反向二進(jìn)制原碼,反向創(chuàng)建鏈表保存結(jié)果,最終得到的單向鏈表就是完整二進(jìn)制數(shù)原碼,之后根據(jù)正負(fù)性,負(fù)數(shù)取反+1。鏈表頭添加符號(hào)位。
2、函數(shù)freeBny為釋放鏈表,如要重復(fù)調(diào)用函數(shù)getBCode,每次調(diào)用需調(diào)用一次freeBny。
3、函數(shù)showBny是打印輸出,為對(duì)齊顯示,按4的倍數(shù)位打印,高位補(bǔ)齊的位數(shù)值均與符號(hào)位一致。
#include stdio.h
#include malloc.h
#include math.h
typedef struct binary//成員用char類型保存數(shù)值,不是'1'或'0'的ASCII碼
{
char b;//一位二進(jìn)制數(shù)0或1
struct binary *next;
}BNY;
BNY *getBCode(int n);//獲得二進(jìn)制數(shù)(最高位是符號(hào)位)
void showBny(BNY *bnyHead);//對(duì)齊打印二進(jìn)制數(shù)(保證是4的倍數(shù))
void freeBny(BNY *bnyHead);//釋放二進(jìn)制數(shù)鏈表空間
int main()
{
int n;
BNY bny,*bnyHead=bny;
while(1)
{
? printf("請(qǐng)輸入一個(gè)整數(shù):"),scanf("%d",n);
? bnyHead-next=getBCode(n);
? printf("轉(zhuǎn)為二進(jìn)制數(shù):"),showBny(bnyHead);
? freeBny(bnyHead);
? printf("\n");
}
return 0;
}
void freeBny(BNY *bnyHead)
{
BNY *prev=NULL,*bny=NULL;
bny=bnyHead-next;
while(bny)
{
? if(prev) prev-next=NULL,free(prev),prev=NULL;
? prev=bny;
? bny=bny-next;
}
bnyHead-next=NULL;
}
void showBny(BNY *bnyHead)
{
int i,f=-1,len=0,n=0;
BNY *bnySave=bnyHead;
while(bnyHead-next)
{
? if(f==-1) f=bnyHead-next-b;
? len++;
? bnyHead=bnyHead-next;
}
if(len%4)
? n=4-len%4;
for(i=0;in;i++)printf("%d",f);
bnyHead=bnySave;
while(bnyHead-next)
{
? printf("%d",bnyHead-next-b);
? n++;
? if(n==4)printf(" "),n=0;
? bnyHead=bnyHead-next;
}
}
BNY *getBCode(int n)
{
int s,y;
static BNY*bnyPrev=NULL;
static int cy=0,f=-1;//加1進(jìn)位用
if(f==-1 n=0)f=1;
if(f==-1 n0)f=0,cy=1;
n=abs(n);
BNY *bnyNew=NULL;
s=n/2,y=n%2;
bnyNew=(BNY *)malloc(sizeof(BNY));
if(!bnyNew) return NULL;
bnyNew-b=y;
// 如是負(fù)數(shù),直接取反+1
if(!f) bnyNew-b=!(bnyNew-b);//從最低位開(kāi)始,負(fù)數(shù)取反
if(cy)bnyNew-b=bnyNew-b+cy,cy=0;//負(fù)數(shù)+1
if(bnyNew-b1)bnyNew-b=0,cy=1;
bnyNew-next=NULL;
if(bnyPrev) bnyNew-next=bnyPrev;
bnyPrev=bnyNew;
n=s;
if(n==0)
{
? bnyNew=(BNY *)malloc(sizeof(BNY));//添加符號(hào)位
? if(!bnyNew) return NULL;
? if(!f)
? ? ? bnyNew-b=1;
? else
? ? ? bnyNew-b=0;
? bnyNew-next=bnyPrev;
? bnyPrev=NULL;
? cy=0,f=-1;
? return bnyNew;
}
return getBCode(n);
}
#includestdio.h
#define n 20
void change2(int t)
{ //將十進(jìn)制數(shù)轉(zhuǎn)換到存放二進(jìn)制的數(shù)組中
int i;
int b[n]={0};
for(i=0;i20;i++)
{
b[i]=t%2;
t=t/2;
}
for(i=n-1;i=0;i--)
{
printf("%d",b[i]);
}
printf("\n");
}
void main(){
int demo;
printf("請(qǐng)輸入一個(gè)十進(jìn)制數(shù):");
scanf("%d",demo);
change2(demo);
}
網(wǎng)站欄目:二進(jìn)制轉(zhuǎn)換函數(shù)遞歸c語(yǔ)言,c語(yǔ)言轉(zhuǎn)二進(jìn)制庫(kù)函數(shù)
路徑分享:http://jinyejixie.com/article14/dssehge.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供手機(jī)網(wǎng)站建設(shè)、小程序開(kāi)發(fā)、網(wǎng)站建設(shè)、網(wǎng)站內(nèi)鏈、營(yíng)銷型網(wǎng)站建設(shè)、品牌網(wǎng)站建設(shè)
聲明:本網(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)