1031 : [기초-출력변환] 10진수 한 개 입력받아 8진수로 출력하기 with Swift

28. 콘솔에서 10진수를 입력받아 8진수로 출력하시오. ( 입력 범위 int )

입력 예시

10

출력 예시

12

JAVA

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		int value = scan.nextInt();
		System.out.println(Integer.toOctalString(value));
	}
}

 

 

Swift 4.2

import Foundation

func octalTrans(value:Int) -> [Int] {
    var flag = value
    var result = [Int]()
    
    while flag >= 8 {
        result.append(flag % 8)
        flag = flag / 8
        if flag < 8 { result.append(flag) }
    }
    
    result.reverse()
    return result
}

let line = readLine()
//let testValue = [124,235,65767,453,434365,57,24]

if line != nil {
    if let value = Int(line!){
        let octalArray = octalTrans(value: value)
        var printValue = String()
        for o in octalArray {
            printValue += "\(o)"
        }
        print(printValue)
    }
}

 

 

java에서는 손쉽게 진수 변환하는게 있는데 swift는 잘안보이네요.

아마 있을거라 생각하는데 찾아도 잘안나와서 그냥 만들어봤습니다.

테스트는 몇개해봤는데 되긴하는데 안될지도 뭔가 안되는게 있을지도 몰라요...

https://codeup.kr/problem.php?id=1031

 

[기초-출력변환] 10진수 한 개 입력받아 8진수로 출력하기

%d(10진수 형태)로 입력받고, %o 를 사용하여 출력하면 8진수(octal)로 출력할 수 있다.

codeup.kr

 

 

 

1032 : [기초-출력변환] 10진 정수 한 개 입력받아 16진수로 출력하기1 with Swift

29. 콘솔에서 10진수를 입력받아 16진수로 출력하라.

입력 예시

255

출력 예시

ff

JAVA

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		int value = scan.nextInt();
        scan.close();				
		System.out.println(Integer.toHexString(value));
	}
}

Swift 4.2

import Foundation
func trans9over(target:Int) -> String {
    var result:String
    switch target {
    case 10: result = "a"
    case 11: result = "b"
    case 12: result = "c"
    case 13: result = "d"
    case 14: result = "e"
    case 15: result = "f"
    default: result = ""
    }
    return result
}

func hexTrans(value:Int) -> [String] {
    var flag = value
    var result = [String]()
    
    while flag >= 16 {
        let mod = flag % 16
        if mod > 9 {
            result.append(trans9over(target: mod))
        } else { result.append("\(flag % 16)") }
        
        flag = flag / 16
        if flag < 16 {
            if flag > 9 {
                result.append(trans9over(target: flag))
            } else { result.append("\(flag)") }
        }
    }
    result.reverse()
    return result
}

let line = readLine()
if line != nil {
    if let value = Int(line!){
        let hexArray = hexTrans(value: value)
        var printValue = String()
        for h in hexArray {
            printValue += "\(h)"
        }
        print(printValue)
    }
}

;;;

뭔가 더 예쁘고 깔끔하게 하는 방법이 있을것 같으나 머리가 멍하네요...

특시 10이상을 문자로 표현하려고할때의 부분이 맘에 걸립니다

스위프트는 완전히 처음부터 독학이고 서적으로 차근차근 시작한게 아니라 솔직히 부족한 부분을 많이 느끼고 있습니다.

https://codeup.kr/problem.php?id=1032

 

[기초-출력변환] 10진 정수 한 개 입력받아 16진수로 출력하기1

%d(10진수 형태)로 입력 받고 %x로 출력하면 16진수(hexadecimal) 형태로 소문자로 출력된다. 10진법은 한 자리에 10개(0 1 2 3 4 5 6 7 8 9) 문자 중 한 개를 사용한다. 16진법은 한 자리에 16개(0 1 2 3 4 5 6 7 8 9 a b c d e f) 문자 중 한 개를 사용한다. 16진법의 a는 10진법의 10, b는 11, c는 12 ... 와 같다.

codeup.kr

 

 

 

 

1033 : [기초-출력변환] 10진 정수 한 개 입력받아 16진수로 출력하기2 with Swift

30. 콘솔에서 10진수를 입력받아 16진수로 출력하라.

입력 예시

255

출력 예시

FF

JAVA

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		int value = scan.nextInt();
        scan.close();
		String printValue = String.format("%X", value);
		System.out.println(printValue);
	}
}

 

Swift 4.2

import Foundation
func trans9over(target:Int,isLowercase:Bool) -> String {
    var result:String
    switch target {
    case 10: result = "a"
    case 11: result = "b"
    case 12: result = "c"
    case 13: result = "d"
    case 14: result = "e"
    case 15: result = "f"
    default: result = ""
    }
    if isLowercase {
        return result
    } else {
        return result.uppercased()
    }
}

func hexTrans(value:Int,isLowercase:Bool) -> [String] {
    var flag = value
    var result = [String]()
    
    while flag >= 16 {
        let mod = flag % 16
        if mod > 9 {
            result.append(trans9over(target: mod, isLowercase: isLowercase))
        } else { result.append("\(flag % 16)") }
        
        flag = flag / 16
        if flag < 16 {
            if flag > 9 {
                result.append(trans9over(target: flag, isLowercase: isLowercase))
            } else { result.append("\(flag)") }
        }
    }
    result.reverse()
    return result
}

let line = readLine()
if line != nil {
    if let value = Int(line!){
        let hexArray = hexTrans(value: value, isLowercase: false)
        var printValue = String()
        for h in hexArray {
            printValue += "\(h)"
        }
        print(printValue)
    }
}

 

이전이랑 다른건 딱히 없습니다...

1032항 문제 소스에서 isLowercase라는 변수하나 추가했을뿐입니다.

문자열 클래스에선 lowercased , uppercased 라는게 있어서 그걸 써봤습니다.

https://codeup.kr/problem.php?id=1033

 

[기초-출력변환] 10진 정수 한 개 입력받아 16진수로 출력하기2

%d(10진수 형태)로 입력 받고 %X로 출력하면 16진수(hexadecimal) 형태로 대문자로 출력된다.

codeup.kr

 

+ Recent posts