백준 1271 - 엄청난 부자2

1 분 소요

백준 1271 문제 바로가기

풀이

$1 \le m \le n \le 10^{1000}$, $m$과 $n$은 10진 정수

n/m과 n%m을 구하면 되고 Go에서 지원하는 라이브러리를 사용하였다.

n, m의 조건을 보면 알겠지만 C 또는 CPP의 경우에는 직접 BigInteger를 구현해야 한다.

(따라서 이 포스팅은 사실 문제 풀이라기 보다는, Go에서 BigInteger의 사용법이라고 보는게 맞을 것 같다.)

소스 코드

package main

import (
	"bufio"
	"fmt"
	"math/big"
	"os"
)

var reader = bufio.NewReader(os.Stdin)
var writer = bufio.NewWriter(os.Stdout)

func main() {
	defer writer.Flush()

	var n, m big.Int

	fmt.Fscan(reader, &n, &m)

	div := new(big.Int)
	div = div.Div(&n, &m)

	mod := new(big.Int)
	mod = mod.Mod(&n, &m)

	fmt.Fprintln(writer, div)
	fmt.Fprintln(writer, mod)
}

참고

package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
	"math/big"
)

var reader = bufio.NewReader(os.Stdin)
var scanner = bufio.NewScanner(os.Stdin)
var writer = bufio.NewWriter(os.Stdout)

func init() {
	scanner.Split(bufio.ScanWords)
}

func nextInt() int {
	scanner.Scan()
	n, _ := strconv.Atoi(scanner.Text())
	return n
}

func main() {
	defer writer.Flush()
	var n, m big.Int

	fmt.Fscan(reader, &n, &m)

	add := new(big.Int)
	add = add.Add(&n, &m)
	fmt.Println("Add : ", add)

	sub := new(big.Int)
	sub = sub.Sub(&n, &m)
	fmt.Println("Sub : ", sub)

	mul := new(big.Int)
	mul = mul.Mul(&n, &m)
	fmt.Println("Mul : ", mul)

	div := new(big.Int)
	div = div.Div(&n, &m)
	fmt.Println("Div : ", div)

	mod := new(big.Int)
	mod = mod.Mod(&n, &m)
	fmt.Println("Mod : ", mod)
}