c언어

이진수

pororo 2026. 5. 9. 21:10
2진수를 입력받아 10진수로 변환하여 출력하는 프로그램을 작성하시오.

#include <stdio.h>
#include <string.h>

int main() {
    long long a;
    long long sum = 0;
    char ch[31];

    scanf("%s", ch);

    int len = strlen(ch);

    for (int i = 0; i < len; i++) {
        a = ch[len - 1 - i] - '0';
        if (i == 0 && a == 1) {
            sum += 1;
        }
        else if (a == 1) {
            long long b = 1;
            for (int j = 0; j < i; j++) {
                b *= 2;
            }
            sum += b;
        }
    }

    printf("%lld", sum);
}

일단 문자열의 길이를 확인 하기위해 #include <string.h> 헤더를 추가하고 그뒤 입력 받는 문자열의 길이를 구한뒤 
for문을 이용하여 a값에 문자열의 길이 -1 즉 문자열은 0번째 인덱스 부터 채움

-1을 한뒤 오른쪽 부터 하나씩 줄여야 하기 때문에 -i를 한다 그리고 그값으로 -'0' 즉 아스키코드값을 빼서 int형으로 바꿨을때 0이나 1이 나오도록 함

if문에서 i==0이면서 a가 1일 경우에는 2^0제곱 이므로 1의 값을 sum값에 더한뒤 그 후 2^1제곱 부터는 b값에 2의 몇 승인지를 구하기위해 for문을 사용하여 2승 n승을 구한뒤 sum값에 더하고 for문이 종료된 이후 sum값을 출력한다.

'c언어' 카테고리의 다른 글

소수의 개수  (0) 2026.05.11
대각선 지그재그  (0) 2026.05.11
디미고에 가고 싶어!  (0) 2026.05.09
체육은 수학과목 입니다.  (0) 2026.05.09
문자열찾기  (0) 2026.05.09