[C언어] 정보올림피아드 문제 풀이
본 자료는 9페이지 의 미리보기를 제공합니다. 이미지를 클릭하여 주세요.
닫기
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
해당 자료는 9페이지 까지만 미리보기를 제공합니다.
9페이지 이후부터 다운로드 후 확인할 수 있습니다.

소개글

[C언어] 정보올림피아드 문제 풀이에 대한 보고서 자료입니다.

목차

생일

선분 상의 정수 점

오목

ISBN

비밀편지

큰 수 뺄셈

긴 자리수 곱셈

2진수 8진수 변환

IP 주소

본문내용

음에 주어지는 테이블을 이용해서 2 진수로 변환
000
0
001
1
010
2
011
3
100
4
101
5
110
6
111
7
입력
100 자리를 넘지 않고 첫 수는 1 로 시작한다.
출력
대응되는 8 진수를 출력한다.
입출력 예
입력
1010
출력
12
입력
11001100
출력
314
소스
#include
#include
#include
void reverse(char *str);
int main()
{
char num[101]="";
char result[101]="";
int i,j=0;
int len;
int t;
for(i=0; i<1; i++) {
scanf("%s",&num);
if(num[0]!='1') {
printf("잘못된 입력\n");
i--;
}
}
len= strlen(num);
reverse(num); // 뒤집은다
for(i=0; i {
t=(num[i]=='\0' ? 0 : num[i]-'0') * 1 + (num[i+1]=='\0' ? 0 : num[i+1]-'0') * 10 + (num[i+2]=='\0' ? 0 : num[i+2]-'0') * 100; // num이 NULL이 아니면 숫자추출해서 곱한뒤 더하고 NULL 이면 0으로 대입해서 더함
if(t==0) {
result[j]='0';
j++;
}
else if(t==1) {
result[j]='1';
j++;
}
else if(t==10) {
result[j]='2';
j++;
}
else if(t==11) {
result[j]='3';
j++;
}
else if(t==100) {
result[j]='4';
j++;
}
else if(t==101) {
result[j]='5';
j++;
}
else if(t==110) {
result[j]='6';
j++;
}
else if(t==111) {
result[j]='7';
j++;
}
}
reverse(result); // 뒤집혀서 저장된것을 다시 뒤집은다.
printf("%s\n",result);
return 0;
}
void reverse(char *str) {
int i, len;
char t;
len=strlen(str);
for (i = 0; i < len/2; i++) { // 거꾸로 뒤집음
t = str[i];
str[i] = str[len-i-1];
str[len-i-1] = t;
}
}
문제9 : IP 주소
32 bit ( 이진수 32 자리 ) ip 주소를 입력으로 받아 8 자리씩 끊어 10 진수로 바꾸어 출력하는 문제이다.
참고로 이진수를 10 진수로 바꾸기위한 ,첫 8 자리의 2 진수 가중치는 다음과 같다.
27
26
25
24
23
22
21
20
128
64
32
16
8
4
2
1
입력
공백없이 2 진수 32 자리숫자가 입력으로 주어진다.
출력
8 자리씩 끊어 10 진수.10진수.10진수.10진수 형태로 출력한다.
입출력 예
입력
00000000000000000000000000000000
출력
0.0.0.0
입력
00000011100000001111111111111111
출력
3.128.255.255
입력
1100 1011 1000 0100 1110 0101 1000 0000
출력
203.132.229.128
입력
01010000000100000000000000000001
출력
80.16.0.1
소스
#include
#include
#include
//32 bit ( 이진수 32 자리 ) ip 주소를 입력으로 받아 8 자리씩 끊어 10 진수로 바꾸어 출력하는 문제이다.
int main()
{
char a[33];
char b[4][9];
char c[8][2];
int i,j,n;
int valu=0;
int res[4]={0};
gets(a);
for(i=0; i<4; i++) {
for(j=0; j<8; j++)
{
b[i][j]=a[j+i*8];
}
b[i][8]='\0';
} // 4개 배열에 옮겨 담음
for(i=0; i<8; i++) {
c[i][0]=b[0][i];
c[i][1]='\0';
} // 첫번째 주소창
n=10000000;
for(i=0; i<8; i++) {
valu=valu+(atoi(c[i])*n);
n/=10;
} // 수치화
n=1;
while(valu!=0) {
res[0]=res[0]+ ((valu%10)*n);
n=n*2;
valu/=10;
} // 첫번째 주소
for(i=0; i<8; i++) {
c[i][0]=b[1][i];
c[i][1]='\0';
} // 두번째 주소창
n=10000000;
for(i=0; i<8; i++) {
valu=valu+(atoi(c[i])*n);
n/=10;
} // 수치화
n=1;
while(valu!=0) {
res[1]=res[1]+ ((valu%10)*n);
n=n*2;
valu/=10;
} // 두번째 주소
for(i=0; i<8; i++) {
c[i][0]=b[2][i];
c[i][1]='\0';
} // 세번째 주소창
n=10000000;
for(i=0; i<8; i++) {
valu=valu+(atoi(c[i])*n);
n/=10;
} // 수치화
n=1;
while(valu!=0) {
res[2]=res[2]+ ((valu%10)*n);
n=n*2;
valu/=10;
} // 세번째 주소
for(i=0; i<8; i++) {
c[i][0]=b[3][i];
c[i][1]='\0';
} // 세번째 주소창
n=10000000;
for(i=0; i<8; i++) {
valu=valu+(atoi(c[i])*n);
n/=10;
} // 수치화
n=1;
while(valu!=0) {
res[3]=res[3]+ ((valu%10)*n);
n=n*2;
valu/=10;
} // 세번째 주소
printf("%d.%d.%d.%d\n",res[0],res[1],res[2],res[3]);
return 0;
}

키워드

  • 가격4,000
  • 페이지수27페이지
  • 등록일2013.12.18
  • 저작시기2013.5
  • 파일형식한글(hwp)
  • 자료번호#898308
본 자료는 최근 2주간 다운받은 회원이 없습니다.
청소해
다운로드 장바구니