天天看點

二進制數的大小

題目:

輸入三個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;

}

繼續閱讀