從我的觀點看世界
2008年11月8日 星期六
作業12
這題我寫了兩種寫法第一種可以做進制轉換,可以轉2-16進位
#include <stdio.h>
/*習題4.34by歐陽
進制轉換
這題使用遞迴的作法
2008-11-2
作業12 寫一個副程式 計算輸入值1的位元數為幾個
*/
int digit=0;
int trm(int,int);
int trm(int tnum,int j)
{
if(tnum==0) return;
if((tnum%j)==1) digit++; //record 1
trm(tnum/j,j);
putchar("0123456789abcdef"[tnum%j]) ;
}/*End ftn*/
int main()
{int innum,i;
do
{
printf("please input a num:");
scanf("%d",&innum);
printf("\n");
}while(innum<=0);/*禁止輸入<=0的值*/
printf("Binary :");/*2進制*/
trm(innum,2);
printf("\n 1有%d 個 :",digit);/*印出有幾個1*/
printf("\nOctal :");/*8進制*/
trm(innum,8);
printf("\nHexadecimal :");/*16進制*/
trm(innum,16);
printf("\n");
system("PAUSE");
return 0;
}
第二種 單純計算有幾個1
#include <stdio.h>
#include <stdlib.h>
/*
2008-11-2
作業12 寫一個副程式 計算輸入值1的位元數為幾個
精簡的寫法
*/
int digit=0;
int bitcount(unsigned x)
{
int b;
for (b = 0; x != 0; x &= (x-1))
b++;
return b;
}
int main()
{
printf("四資工一甲 歐陽毅\n");
printf("作業12\n\n");
int innum,i;
do
{
printf("please input a num:");
scanf("%d",&innum);
}while(innum<=0);/*禁止輸入<=0的值*/
printf("\n 1有%d 個 :",bitcount(innum));/*印出有幾個1*/
printf("\n");
system("PAUSE");
return 0;
}
訂閱:
張貼留言
(
Atom
)

沒有留言 :
張貼留言