題目:
輸入三個2 進制的數,要求将這三個二進制數對應的十進制整數按從小到大的順序輸。
要求程式定義一個bToD()函數和一個main()函數,bToD() 函數的功能是将二進制數轉化為十進制整數,其餘功能在main()函數中實作。
int bToD(char str[])
{
//函數傳回二進制數str對應十進制整數
}
輸入:
輸入三個2 進制的數,用空格隔開。所有資料均為非負數,二進制數長度不超過30。
輸出:
将對應的十進制整數按從小到大的順序輸出
Exemple:
輸入:
1101 110 1011
輸出:
6 11 13
My DaiMa:
#include<stdio.h>
#include<string.h>
int bToD(char str[])
{
int len,i,s=0,j,k;
len=strlen(str);
for(i=0;i<len-1;i++) //這個必須是從0開始的,不信可以自己試試
{
k=2;
for(j=1;j<len-1-i;j++) //由于int型的數用pow會出錯,是以這裡用for循環算出2的幾次方
k=k*2; //紅色警告<下面這一行>
s=s+k*(str[i]-'0'); //here這道題的最最注意點,因為str是字元so它乘的時候乘的是ASCII表
}
s=s+(str[len-1]-'0'); //是以如果要把它變成int數的話,就要減去字元'0'的ASCII數
return s;
}
int main()
{
int a[3],i,j,t;
char str[31];
for(i=0;i<3;i++)
{
scanf("%s",str);
a[i]=bToD(str);
}
for(i=1;i<3;i++) //這裡相當于冒泡排序
{
for(j=0;j<3-i;j++)
{
if(a[j]>a[j+1])
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
for(i=0;i<2;i++)
printf("%d ",a[i]);
printf("%d",a[2]);
return 0;
}