반응형
이전에 짯던 것 과 달리,
이번에는 좀더 큰수를 받아들이기 위하여 unsigned long long을 사용하였다.
또한 file로 출력시켰다.
또한, 함수를 사용하지 않아 알고리즘의 이해가 필요하다.
16진수를 문자형으로 받은뒤, 문자의 길이를 잰다.
이후 받아온 숫자를 길이 만큼 받는다.
길이만큼 받으면서,각 자릿수마다 16의 제곱을 곱해서 16진수화 시켜준다.
각 자릿수는 position변수가 제어해준다.
각자릿수의 16제곱을 모두 합한뒤 decimal 변수에 저장시켜준다.(10진수로 저장됨)
이후 for문을 이용해
첫번째받은숫자부터 마지막입력받은숫자까지 1씩증가하며
16진수로 출력해준다.
_끝_
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 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 | #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> #include <math.h> int main() { char first[20]; // 16진수로 된 문자열 char last[20]; unsigned long long decimal = 0; unsigned long long ldecimal = 0;// 10진수를 저장할 변수 unsigned long long a=0; int i=0; char com[5]={0}; int position = 0; int lposition = 0; FILE *wfp = fopen("output.txt","w"); //////////////////////////////////////////////////////////////////////////////첫번째//////////////////////////////////////////// printf("1:"); scanf("%s",&first); for ( i = strlen(first) - 1; i >= 0; i--) // 문자열을 역순으로 반복 { char ch = first[i]; // 각 자릿수에 해당하는 문자를 얻음 if (ch >= 48 && ch <= 57) // 문자가 0~9이면(ASCII 코드 48~57) { // 문자에서 0에 해당하는 ASCII 코드 값을 빼고 // 16에 자릿수를 거듭제곱한 값을 곱함 decimal += (ch - 48) * pow(16, position); } else if (ch >= 65 && ch <= 70) // 문자가 A~F이면(ASCII 코드 65~70) { // 대문자로 된 16진수의 처리 // 문자에서 (A에 해당하는 ASCII 코드 값 - 10)을 빼고 // 16에 자릿수를 거듭제곱한 값을 곱함 decimal += (ch - (65 - 10)) * pow(16, position); } else if (ch >= 97 && ch <= 102) // 문자가 a~f이면(ASCII 코드 97~102) { // 소문자로 된 16진수의 처리 // 문자에서 (a에 해당하는 ASCII 코드 값 - 10)을 빼고 // 16에 자릿수를 거듭제곱한 값을 곱함 decimal += (ch - (97 - 10)) * pow(16, position); } position++; } // printf("%llu\n", decimal); //첫번째수를 정수로 바꾸었을때 값 /////////////////////////////////////////////////////////////////////////////두번째//////////////////////////////////////////////////////////// printf("2:"); scanf("%s",&last); for ( i = strlen(last) - 1; i >= 0; i--) // 문자열을 역순으로 반복 { char ch = last[i]; // 각 자릿수에 해당하는 문자를 얻음 if (ch >= 48 && ch <= 57) // 문자가 0~9이면(ASCII 코드 48~57) { // 문자에서 0에 해당하는 ASCII 코드 값을 빼고 // 16에 자릿수를 거듭제곱한 값을 곱함 ldecimal += (ch - 48) * pow(16, lposition); } else if (ch >= 65 && ch <= 70) // 문자가 A~F이면(ASCII 코드 65~70) { // 대문자로 된 16진수의 처리 // 문자에서 (A에 해당하는 ASCII 코드 값 - 10)을 빼고 // 16에 자릿수를 거듭제곱한 값을 곱함 ldecimal += (ch - (65 - 10)) * pow(16, lposition); } else if (ch >= 97 && ch <= 102) // 문자가 a~f이면(ASCII 코드 97~102) { // 소문자로 된 16진수의 처리 // 문자에서 (a에 해당하는 ASCII 코드 값 - 10)을 빼고 // 16에 자릿수를 거듭제곱한 값을 곱함 ldecimal += (ch - (97 - 10)) * pow(16, lposition); } lposition++; } // printf("%llu\n", ldecimal); //두번째수를 정수로 바꾸었을때 값 //////////////////////////////////////////////////////////////////////////////////////////////////////////////// printf("3:"); scanf("%s",&com); for(a=decimal; a<=ldecimal; a++) { fprintf(wfp,"%s%llx\n",com,a); } return 0; } | cs |
반응형
'c언어 > c언어 (진수변환)' 카테고리의 다른 글
c언어[진수변환 함수](file출력) (0) | 2017.10.17 |
---|