十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊
量身定制 + 運(yùn)營維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
#include?"stdio.h"
創(chuàng)新互聯(lián),為您提供重慶網(wǎng)站建設(shè)公司、網(wǎng)站制作、網(wǎng)站營銷推廣、網(wǎng)站開發(fā)設(shè)計,對服務(wù)成都陽臺護(hù)欄等多個行業(yè)擁有豐富的網(wǎng)站建設(shè)及推廣經(jīng)驗(yàn)。創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司成立于2013年,提供專業(yè)網(wǎng)站制作報價服務(wù),我們深知市場的競爭激烈,認(rèn)真對待每位客戶,為客戶提供賞心悅目的作品。 與客戶共同發(fā)展進(jìn)步,是我們永遠(yuǎn)的責(zé)任!
int?main()
{
int?n;
int?i=0,j;
char?str[100]={0};
char?output[100]={0};
printf("請輸入一個整數(shù):");
scanf("%d",n);
while(n)
{
? ? ?str[i]=n%2+'0';
? ? ?n=n/2;
? ? ?i++;
}
for(j=0;ji;j++)
? ?output[j]=str[i-1-j];
printf("該整數(shù)的二進(jìn)制表示為:%s\n",output);
}
1、打開visualC++6.0-文件-新建-文件-C++SourceFile。
2、輸入預(yù)處理命令和主函數(shù):
#includestdio.h? ? ? ? ? ?/*輸入輸出頭文件*/
voidmain()/*空類型:主函數(shù)*/
3、定義變量和數(shù)組的數(shù)據(jù)類型并輸入一個十進(jìn)制:
intb[16],x,k,r,i;/*定義變量和數(shù)組的數(shù)據(jù)類型為整型*/
printf("輸入一個十進(jìn)制:");/*輸出文字提示*/
scanf("%d",x);? ? ? ? ?/*輸入一個十進(jìn)制數(shù)字*/
k=-1;/*將-1賦給k*/
4、用除R取余倒計法將十進(jìn)制的數(shù)轉(zhuǎn)化成二進(jìn)制的數(shù):
do/*用循環(huán)將十進(jìn)制的數(shù)轉(zhuǎn)化成二進(jìn)制的數(shù)*/
{
r=x%2;/*用除R取余倒計法計算二進(jìn)制*/
b[++k]=r;/*將值賦給數(shù)組*/
x/=2;/*將原數(shù)除2*/
}while(x=1);
5、輸出結(jié)果:
for(i=k;i=0;i--)? ? ? ? /*將上面倒計的數(shù)正回來*/
printf("%d",b[i]);/*輸出結(jié)果*/
printf("\n");
6、完整的源代碼:
#includestdio.h? ? ? ? ? ?/*輸入輸出頭文件*/
voidmain()/*空類型:主函數(shù)*/
{
intb[16],x,k,r,i;/*定義變量和數(shù)組的數(shù)據(jù)類型為整型*/
printf("輸入一個十進(jìn)制:");/*輸出文字提示*/
scanf("%d",x);? ? ? ? ?/*輸入一個十進(jìn)制數(shù)字*/
k=-1;/*將-1賦給k*/
do/*用循環(huán)將十進(jìn)制的數(shù)轉(zhuǎn)化成二進(jìn)制的數(shù)*/
{
r=x%2;/*用除R取余倒計法計算二進(jìn)制*/
b[++k]=r;/*將值賦給數(shù)組*/
x/=2;/*將原數(shù)除2*/
}while(x=1);
for(i=k;i=0;i--)? ? ? ? /*將上面倒計的數(shù)正回來*/
printf("%d",b[i]);/*輸出結(jié)果*/
printf("\n");
}
根據(jù)評論要求,改進(jìn)代碼:
1、函數(shù)getBCode是題目要的遞歸函數(shù),實(shí)現(xiàn)轉(zhuǎn)二進(jìn)制(最高位是符號位)。
思路是十進(jìn)制數(shù)絕對值除以2求余,得到反向二進(jìn)制原碼,反向創(chuàng)建鏈表保存結(jié)果,最終得到的單向鏈表就是完整二進(jìn)制數(shù)原碼,之后根據(jù)正負(fù)性,負(fù)數(shù)取反+1。鏈表頭添加符號位。
2、函數(shù)freeBny為釋放鏈表,如要重復(fù)調(diào)用函數(shù)getBCode,每次調(diào)用需調(diào)用一次freeBny。
3、函數(shù)showBny是打印輸出,為對齊顯示,按4的倍數(shù)位打印,高位補(bǔ)齊的位數(shù)值均與符號位一致。
#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ù)(最高位是符號位)
void showBny(BNY *bnyHead);//對齊打印二進(jìn)制數(shù)(保證是4的倍數(shù))
void freeBny(BNY *bnyHead);//釋放二進(jìn)制數(shù)鏈表空間
int main()
{
int n;
BNY bny,*bnyHead=bny;
while(1)
{
? printf("請輸入一個整數(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);//從最低位開始,負(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));//添加符號位
? 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);
}
呵呵這樣做的確輸出的是反過來的數(shù)
方法一:
可以利用數(shù)組順序存儲轉(zhuǎn)換過程中依次得到每個數(shù)字位,
轉(zhuǎn)換結(jié)束后再按相反的次序輸出數(shù)組內(nèi)容即可得到正確的結(jié)果。
方法二:
直接搞掂,這才叫強(qiáng)?。?!
且看我如何強(qiáng)法??!
#include stdio.h
void trans(int x)
{
int a[30];//我算過了,1億好像才29位的二進(jìn)制,一般不用算
//這么大的數(shù)了吧~~
int i=0,rem;
do{
rem=x%2;x=x/2;
a[i]=rem;
i++;
}while(x!=0);//這個算法看你的代碼知道你懂!:)
while(i0)
printf("%d",a[--i]);
printf("\n");//這就是我的精華了,倒輸出正確順序的數(shù)~
}
void main()
{
int d;
printf("請輸入一個十進(jìn)制的正整數(shù):\n");
do scanf("%d",d);while(d0);
trans(d);
}
我覺得樓主的水平也不差,
應(yīng)該看得懂吧
我只是加了幾句而已
加分哦:)