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 |