#28761: 請問為甚麼當我輸入1234時,得到的不是二進位數字?


joey13130905@gmail.com (笨呆瓜)

學校 : 淡江大學
編號 : 89206
來源 : [1.163.240.33]
最後登入時間 :
2023-11-06 14:53:44
e545. 10019 - Funny Encryption Method -- UVA | From: [114.35.245.150] | 發表日期 : 2021-12-31 00:12

#include <stdio.h>

int Count_one(int binary_number){

    if(binary_number == 0) return 0;

    return Count_one(binary_number / 10) + binary_number % 10;

}

 

long long int HexadecimaltoDecimal(long long int hexadecimal_number, int power){

    if(hexadecimal_number == 0) return 0;

    return HexadecimaltoDecimal(hexadecimal_number / 10, power * 16) + hexadecimal_number % 10 * power;

}

 

long long int DecimaltoBinary(long long int n, int power){

    if(n == 0) return 0;

    return DecimaltoBinary(n / 2, power * 10) + n % 2 * power;

}

int main(){

    int time, num, b1, b2;

    long long int X1, X2;

 

    scanf("%d", &time);

    for(int i = 0;i < time;i++){

        scanf("%d",&num);

        

        X1 = DecimaltoBinary(num, 1);

        b1 = Count_one(X1);

        

        printf("X1=%lld\n",X1);  //為了看為什麼錯,而加上的

        

        X2 = DecimaltoBinary(HexadecimaltoDecimal(num, 1), 1);

        b2 = Count_one(X2);

        printf("X2=%lld\n", X2); //為了看為什麼錯,而加上的

        

        printf("%d %d\n", b1, b2);

    }

    return 0;

}

 
#28769: Re:請問為甚麼當我輸入1234時,得到的不是二進位數字?


cges30901 (cges30901)

學校 : 不指定學校
編號 : 30877
來源 : [39.9.74.255]
最後登入時間 :
2024-10-14 22:20:08
e545. 10019 - Funny Encryption Method -- UVA | From: [27.51.89.147] | 發表日期 : 2021-12-31 18:19


    return DecimaltoBinary(n / 2, power * 10) + n % 2 * power;


這裡溢位了,power太大,int裝不下

 
ZeroJudge Forum