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 | import java.util.Scanner; public class Practice { public static void main (String[] args) { Scanner in = new Scanner(System.in); String hexa; int hexaDemicalResult=0, hexaX=1, i,j; System.out.printf("\n변환할 16진수를 입력해주세요 : "); hexa = in.next(); for(i=1;i<=hexa.length();i++){ if(Character.getNumericValue(hexa.charAt(hexa.length()-i))<=9){ for(j=2;j<=i;j++){ hexaX = hexaX*16; } hexaDemicalResult = hexaDemicalResult + hexaX*Character.getNumericValue(hexa.charAt(hexa.length()-i)); } else if(hexa.charAt(hexa.length()-i)=='a'){ for(j=2;j<=i;j++){ hexaX = hexaX*16; } hexaDemicalResult = hexaDemicalResult + hexaX*10; } else if(hexa.charAt(hexa.length()-i)=='b'){ for(j=2;j<=i;j++){ hexaX = hexaX*16; } hexaDemicalResult = hexaDemicalResult + hexaX*11; } else if(hexa.charAt(hexa.length()-i)=='c'){ for(j=2;j<=i;j++){ hexaX = hexaX*16; } hexaDemicalResult = hexaDemicalResult + hexaX*12; } else if(hexa.charAt(hexa.length()-i)=='d'){ for(j=2;j<=i;j++){ hexaX = hexaX*16; } hexaDemicalResult = hexaDemicalResult + hexaX*13; } else if(hexa.charAt(hexa.length()-i)=='e'){ for(j=2;j<=i;j++){ hexaX = hexaX*16; } hexaDemicalResult = hexaDemicalResult + hexaX*14; } else if(hexa.charAt(hexa.length()-i)=='f'){ for(j=2;j<=i;j++){ hexaX = hexaX*16; } hexaDemicalResult = hexaDemicalResult + hexaX*15; } } System.out.println("\n변환 된 10진수 값 : "+hexaDemicalResult); } } |
실행 결과
16진수 기준 2자리수는 정상으로 출력된다.
근데 3자리수부터 이상해짐
한마디로 f5a를 변환해야 하는데 f05a를 변환해버린다.
4자리수 변환해보면
5자리수는 당연히 ABCDE 변환하면 A000B00C0DE 를 변환한 결과가 나옴
프로그램 처음부터 찬찬히 따라가면서 해봐도 어디가 오류인지 찾을 수가 없다 ㅠ
프갤럼들아 시간 되면 도와줘!
아 1자리수도 물론 정상작동됨
이런 병신.. hexaX 초기화를 안하고 계속 16 곱한채로 쓰고있었네
이거 모범 코드로 봐도 됨?