기초연습-2

1695 단어 토대
기초 연습 16진법 8진법
시간 제한: 1.0s 메모리 제한: 512.0MB
   
문제 설명
n개의 16진수 정수를 정하고 대응하는 8진수를 출력합니다.
입력 형식
입력한 첫 번째 동작은 정수 n (1<=n<=10) 입니다.
다음 n행은 0~9, 대문자 A~F로 구성된 문자열로 변환할 16진수 양의 정수를 나타내며 각 16진수 길이는 100000을 초과하지 않습니다.
출력 형식
각 비헤이비어에 해당하는 8진수 양의 정수를 입력하는 n행을 출력합니다.
주의
입력한 16진수에는 012A와 같은 선도 0이 없습니다.
출력의 8진수도 전도 0이 있을 수 없다.
샘플 입력
2
39
123ABC
샘플 출력
71
4435274
프롬프트
먼저 16진수를 어떤 진수로 변환한 다음에 어떤 진수에서 8진수로 변환한다.
 
 
#include <stdio.h>

#include <string.h>

#include <math.h>

int num[400004],ans[400004];

int swapOXtoEIGHT(char s[])

{

    int len =strlen(s);

	int i,a;

	int count=len*4;

	memset(num,0,sizeof(num));

	memset(ans,0,sizeof(ans));

    for(i=len-1;i>=0;i--)

    {

		int j=0;

        if(s[i]>=65)

        {

			a = s[i]-55;

        } 

	    else

        {

			a = s[i]-48;

        }

       

		for(j=1;j<=4;j++)

		{

			--count;

			num[count] = a%2;

			a = a/2;

		}

	}

	count=len*4%3;

	a=0;

	if(count==1)

	{

		ans[0]=num[0];

		a++;

	}

	else if(count==2)

	{

		ans[0]=num[0]*2+num[1];

		a++;

	}

	for(i=count;i<len*4;i=i+3)

	{

		ans[a++]=num[i]*4+num[i+1]*2+num[i+2];

	}

	for(i=0;i<a;i++)

    {

        if(ans[i]!=0)

       break;

    }

	for(i=i;i<a;i++)

	{

		printf("%d",ans[i]);

	}

	printf("
"); return 0; } int main() { int n; char s[100001]; while(scanf("%d",&n)!=EOF) { while(n--) { scanf("%s",s); swapOXtoEIGHT(s); } } return 0; }

코드는 참고만 제공합니다.

좋은 웹페이지 즐겨찾기