#include stdio.h
10年積累的網站建設、成都網站建設經驗,可以快速應對客戶對網站的新想法和需求。提供各種問題對應的解決方案。讓選擇我們的客戶得到更好、更有力的網絡服務。我雖然不認識你,你也不認識我。但先網站制作后付款的網站建設流程,更有大悟免費網站建設讓你可以放心的選擇與我們合作。
#include stdlib.h
int Math(int n)//這個是用來算二進制每一個位置上的數字所標示的實際值。例如:1001:第一個“1“ 表示8
{
int i,sum=1;
for(i=0;in;i++)
{
sum= sum*2;
}
return sum;
}
int judge(int n)//傳進來的數值是二進制,但是他實際是十進制數,只不過只有1和0組成,
{
int sum=0,k=0;
while(n!=0)
{
int m=n%10;//獲取每個位置的數字
sum=sum+m*Math(k);//求和
n=n/10;
k++;//用來表示第幾個位置
}
return sum;
}
int main()
{
int m;
scanf("%d",m);
printf("%d\n",judge(m));
return 0;
}
自己寫的,有什么問題一起討論!thanks!
根據評論要求,改進代碼:
1、函數getBCode是題目要的遞歸函數,實現(xiàn)轉二進制(最高位是符號位)。
思路是十進制數絕對值除以2求余,得到反向二進制原碼,反向創(chuàng)建鏈表保存結果,最終得到的單向鏈表就是完整二進制數原碼,之后根據正負性,負數取反+1。鏈表頭添加符號位。
2、函數freeBny為釋放鏈表,如要重復調用函數getBCode,每次調用需調用一次freeBny。
3、函數showBny是打印輸出,為對齊顯示,按4的倍數位打印,高位補齊的位數值均與符號位一致。
#include stdio.h
#include malloc.h
#include math.h
typedef struct binary//成員用char類型保存數值,不是'1'或'0'的ASCII碼
{
char b;//一位二進制數0或1
struct binary *next;
}BNY;
BNY *getBCode(int n);//獲得二進制數(最高位是符號位)
void showBny(BNY *bnyHead);//對齊打印二進制數(保證是4的倍數)
void freeBny(BNY *bnyHead);//釋放二進制數鏈表空間
int main()
{
int n;
BNY bny,*bnyHead=bny;
while(1)
{
? printf("請輸入一個整數:"),scanf("%d",n);
? bnyHead-next=getBCode(n);
? printf("轉為二進制數:"),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進位用
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;
// 如是負數,直接取反+1
if(!f) bnyNew-b=!(bnyNew-b);//從最低位開始,負數取反
if(cy)bnyNew-b=bnyNew-b+cy,cy=0;//負數+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));//添加符號位
? 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)
{ //將十進制數轉換到存放二進制的數組中
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("請輸入一個十進制數:");
scanf("%d",demo);
change2(demo);
}