//Golang 練習題
package main
import (
"fmt"
"log"
"math"
"strconv"
"strings"
)
var g_dayRemain int = 97
func countDay(day_remain int) (int, int) {
week_prec := 7
var week int = day_remain / week_prec
var day int = day_remain % week_prec
return week, day
}
//轉換公式5/9*(華氏溫度-100)
func temperatureConvert(fahrenheit float32) float32 {
return (5.0 / 9 * (fahrenheit - 100))
}
//交換兩個變量
func swap(a, b int) (int, int) {
a = a + b
b = a - b
a = a - b
return a, b
//return b,a //一句話就可以實現a,b交換
}
//進制間的輸出
func scale() {
var num int = 5
var num1 int = 80
var num2 int = 011 //八進制0打頭
var num3 int = 0x11
fmt.Printf("num 二進制是%b\n", num)
fmt.Printf("num1 八進制是%o\n", num1) //輸出120 1*8^2+2*8^1+0*8^0
fmt.Printf("num1 十六進制是%#x\n", num1)
fmt.Println("num2=", num2)
fmt.Println("num3=", num3)
}
// 十進制轉二進制
func DecBin(n int64) string {
if n < 0 {
log.Println("Decimal to binary error: the argument must be greater than zero.")
return ""
}
if n == 0 {
return "0"
}
s := ""
for q := n; q > 0; q = q / 2 {
m := q % 2
s = fmt.Sprintf("%v%v", m, s)
}
return s
}
// Decimal to octal
func DecOct(d int64) int64 {
if d == 0 {
return 0
}
if d < 0 {
log.Println("Decimal to octal error: the argument must be greater than zero.")
return -1
}
s := ""
for q := d; q > 0; q = q / 8 {
m := q % 8
s = fmt.Sprintf("%v%v", m, s)
}
n, err := strconv.Atoi(s)
if err != nil {
log.Println("Decimal to octal error:", err.Error())
return -1
}
return int64(n)
}
// Decimal to hexadecimal
func DecHex(n int64) string {
if n < 0 {
log.Println("Decimal to hexadecimal error: the argument must be greater than zero.")
return ""
}
if n == 0 {
return "0"
}
hex := map[int64]int64{10: 65, 11: 66, 12: 67, 13: 68, 14: 69, 15: 70}
s := ""
for q := n; q > 0; q = q / 16 {
m := q % 16
if m > 9 && m < 16 {
m = hex[m]
s = fmt.Sprintf("%v%v", string(m), s)
continue
}
s = fmt.Sprintf("%v%v", m, s)
}
return s
}
// Binary to decimal
func BinDec(b string) (n int64) {
s := strings.Split(b, "")
l := len(s)
i := 0
d := float64(0)
for i = 0; i < l; i++ {
f, err := strconv.ParseFloat(s[i], 10)
if err != nil {
log.Println("Binary to decimal error:", err.Error())
return -1
}
d += f * math.Pow(2, float64(l-i-1))
}
return int64(d)
}
// Octal to decimal
func OctDec(o int64) (n int64) {
s := strings.Split(strconv.Itoa(int(o)), "")
l := len(s)
i := 0
d := float64(0)
for i = 0; i < l; i++ {
f, err := strconv.ParseFloat(s[i], 10)
if err != nil {
log.Println("Octal to decimal error:", err.Error())
return -1
}
d += f * math.Pow(8, float64(l-i-1))
}
return int64(d)
}
// Hexadecimal to decimal
func HexDec(h string) (n int64) {
s := strings.Split(strings.ToUpper(h), "")
l := len(s)
i := 0
d := float64(0)
hex := map[string]string{"A": "10", "B": "11", "C": "12", "D": "13", "E": "14", "F": "15"}
for i = 0; i < l; i++ {
c := s[i]
if v, ok := hex[c]; ok {
c = v
}
f, err := strconv.ParseFloat(c, 10)
if err != nil {
log.Println("Hexadecimal to decimal error:", err.Error())
return -1
}
d += f * math.Pow(16, float64(l-i-1))
}
return int64(d)
}
// Octal to binary
func OctBin(o int64) string {
d := OctDec(o)
if d == -1 {
return ""
}
return DecBin(d)
}
// Hexadecimal to binary
func HexBin(h string) string {
d := HexDec(h)
if d == -1 {
return ""
}
return DecBin(d)
}
// Binary to octal
func BinOct(b string) int64 {
d := BinDec(b)
if d == -1 {
return -1
}
return DecOct(d)
}
// Binary to hexadecimal
func BinHex(b string) string {
d := BinDec(b)
if d == -1 {
return ""
}
return DecHex(d)
}
//用終端寫入數據
func FomatInOutput() {
var name string
var age byte
var salary float32
var isPass bool
fmt.Println("請輸入姓名:")
fmt.Scanln(&name)
fmt.Println("請輸入年齡:")
fmt.Scanln(&age)
fmt.Println("請輸入薪水:")
fmt.Scanln(&salary)
fmt.Println("請輸入是否通過考試:")
fmt.Scanln(&isPass)
fmt.Printf("名字是%v\n年齡是%v\n薪水是%v\n是否通過考試%v", name, age, salary, isPass)
fmt.Println("請輸入姓名 年齡 薪水 是否通過考試,中間用空格隔開")
fmt.Scanf("%s %d %f %t", &name, &age, &salary, &isPass)
fmt.Printf("名字是%v\n年齡是%v\n薪水是%v\n是否通過考試%v", name, age, salary, isPass)
}
func main() {
var week_re int
var day_re int
var centigrade float32
var fahrenheit float32 = 198.25
week_re, day_re = countDay(g_dayRemain)
fmt.Printf("再過%d個星期零%d天放假.\n", week_re, day_re)
centigrade = temperatureConvert(fahrenheit)
fmt.Printf("華氏溫度%v對應的攝氏溫度是%v.\n", fahrenheit, centigrade)
var num1 int = 8
var num2 int = 9
fmt.Println("num1=", num1, "num2=", num2)
num1, num2 = swap(num1, num2)
fmt.Println("num1=", num1, "num2=", num2)
//FomatInOutput()
scale()
//十進制轉二進制
var binStr = DecBin(15)
fmt.Println("binStr=", binStr)
//十進制轉八進制
var octInt = DecOct(15)
fmt.Println("octInt=", octInt)
//十進制轉十六進制
var hexStr = DecHex(255)
fmt.Println("hexStr=", hexStr)
//二進制轉十進制
var bin2Dec = BinDec("1101")
fmt.Println("bin2Dec=", bin2Dec)
//八進制轉十進制
var oct2Dec = OctDec(120)
fmt.Println("oct2Dec=", oct2Dec)
//十六進制轉十進制
var hex2Dec = HexDec("FF")
fmt.Println("hex2Dec=", hex2Dec)
}
Code Run輸出: