Problem:
Score : 200 points

Problem Statement

You are given nonnegative integers a and b (a ≤ b), and a positive integer x.
Among the integers between a and b, inclusive, how many are divisible by x?

Constraints

0 ≤ a ≤ b ≤ 10^{18}

1 ≤ x ≤ 10^{18}

Input

The input is given from Standard Input in the following format:

a b x

Output

Print the number of the integers between a and b, inclusive, that are divisible by x.

Sample Input 1

4 8 2

Sample Output 1

3

There are three integers between 4 and 8, inclusive, that are divisible by 2: 4, 6 and 8.

Sample Input 2

0 5 1

Sample Output 2

6

There are six integers between 0 and 5, inclusive, that are divisible by 1: 0, 1, 2, 3, 4 and 5.

Sample Input 3

9 9 2

Sample Output 3

0

There are no integer between 9 and 9, inclusive, that is divisible by 2.

Sample Input 4

1 1000000000000000000 3

Sample Output 4

333333333333333333

Watch out for integer overflows.

Solution in Go (1.6) (judge verdict: Wrong Answer)

package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
	"strings"
)

var sc = bufio.NewScanner(os.Stdin)

func main() {
	sc.Scan()
	line := sc.Text()
	numbers := strings.Split(line, " ")
	a, _ := strconv.ParseUint(numbers[0], 10, 64)
	b, _ := strconv.ParseUint(numbers[1], 10, 64)
	x, _ := strconv.ParseUint(numbers[2], 10, 64)
	if x > b {
		fmt.Println(0)
		os.Exit(0)
	}
	if a == b {
		if a%x == 0 {
			fmt.Println(1)
			os.Exit(0)
		}
		fmt.Println(0)
		os.Exit(0)
	}
	if b-a < x {
		fmt.Println(1)
		os.Exit(0)
	}
	// x の倍数で最も小さいa以上の値
	minXMulti := x * uintDivCeil(a, x)
	// x の倍数で最も大きいb以下の値
	maxXMulti := x * uintDivFloor(b, x)
	count := 1 + ((maxXMulti - minXMulti) / x)
	fmt.Println(count)
}

func uintDivCeil(x, y uint64) uint64 {
	q := x / y
	r := x % y
	if r == 0 {
		return q
	}
	return q + 1
}

func uintDivFloor(x, y uint64) uint64 {
	return x / y
}