当前位置: 移动技术网 > IT编程>脚本编程>Go语言 > Go基础(3)

Go基础(3)

2019年03月28日  | 移动技术网IT编程  | 我要评论

demo1:

package main

import "fmt"

func print() {
    for i := 1; i < 10; i++ {
        for j := 1; j <= i; j++ {
            fmt.printf("%d * %d = %d  ", j, i, i*j)
        }
        fmt.println()
    }
}

func main() {
    print()
}

分析:

1.基本的99乘法表打印练习

 

demo2:

package main

import "fmt"

func main() {
    const min int = 1
    const max int = 10000
    process(min, max)
}

func process(min, max int) {
    for i := min; i <= max; i++ {
        if perfect(i) {
            fmt.printf("%d是完数\n", i)
        }
    }
}

func perfect(n int) bool {
    var sum int = 0
    for i := 1; i < n; i++ {
        if n%i == 0 {
            sum += i
        }
    }
    return n == sum
}

分析:

1.判断1-10000有哪些完数的练习

 

demo3:

package main

import "fmt"

func main() {
    const str1 string = "helloolleh"
    const str2 string = "helloworld"
    process(str1)
    process(str2)

    const str3 string = "上海自来水来自海上"
    const str4 string = "我喜欢学习go"
    const str5 string = "go上海自来水来自海上og"
    essential(str3)
    essential(str4)
    essential(str5)
}

//可以正常处理英文字符串,无法处理中文
func process(str string) {
    var flag bool = true
    for i := 0; i < len(str); i++ {
        if i == len(str)/2 {
            break
        }
        last := len(str) - i - 1
        if str[i] != str[last] {
            flag = false
        }
    }
    if flag {
        fmt.printf("%s 是回文字符串\n", str)
    } else {
        fmt.printf("%s 不是回文字符串\n", str)
    }
    return
}

//正常处理所有的字符串
func essential(str string) {
    tmp := []rune(str)
    lenth := len(tmp)
    var flag bool = true
    for i, _ := range tmp {
        if i == lenth/2 {
            break
        }
        last := lenth - i - 1
        if tmp[i] != tmp[last] {
            flag = false
        }
    }
    if flag {
        fmt.printf("%s 是回文字符串\n", str)
    } else {
        fmt.printf("%s 不是回文字符串\n", str)
    }
    return
}

分析:

1.判断是否是回文字符串的练习

2.尤其注意中文字符的处理,使用rune

 

demo4:

package main

import (
    "bufio"
    "fmt"
    "os"
)

func main() {
    result := read()
    worldcount, spacecount, numbercount, othercount := count(result)
    fmt.printf("字母:%d\n空格:%d\n数字:%d\n其他字符:%d\n", worldcount, spacecount, numbercount, othercount)
}

func read() string {
    reader := bufio.newreader(os.stdin)
    result, _, err := reader.readline()
    if err != nil {
        fmt.println("read from console error:", err)
        return ""
    }
    return string(result)
}

func count(str string) (worldcount, spacecount, numbercount, othercount int) {
    tmp := []rune(str)
    for _, v := range tmp {
        switch {
        case v >= 'a' && v <= 'z':
            fallthrough
        case v >= 'a' && v <= 'z':
            worldcount++
        case v == ' ':
            spacecount++
        case v >= '0' && v <= '9':
            numbercount++
        default:
            othercount++
        }
    }
    return
}

分析:

1.读取一串输入并对字符进行技术的程序

2.对常用其他包的简单使用

 

demo5:

package main

import "fmt"

func main() {
    var a string = "92233720368547758075"
    var b string = "129223372036854775807"
    result := bigintegeradd(a, b)
    fmt.printf("%s + %s = %s\n", a, b, result)
}

func bigintegeradd(a, b string) (result string) {
    if len(a) == 0 || len(b) == 0 {
        result = "0"
        return
    }
    var index1 int = len(a) - 1
    var index2 int = len(b) - 1
    var left int
    for index1 >= 0 && index2 >= 0 {
        c1 := a[index1] - '0'
        c2 := b[index2] - '0'
        sum := int(c1) + int(c2) + left
        if sum >= 10 {
            left = 1
        } else {
            left = 0
        }
        c3 := (sum % 10) + '0'
        result = fmt.sprintf("%c%s", c3, result)
        index1--
        index2--
    }
    for index1 >= 0 {
        c1 := a[index1] - '0'
        sum := int(c1) + left
        if sum >= 10 {
            left = 1
        } else {
            left = 0
        }
        c3 := (sum % 10) + '0'
        result = fmt.sprintf("%c%s", c3, result)
        index1--
    }
    for index2 >= 0 {
        c2 := b[index2] - '0'
        sum := int(c2) + left
        if sum >= 10 {
            left = 1
        } else {
            left = 0
        }
        c3 := (sum % 10) + '0'
        result = fmt.sprintf("%c%s", c3, result)
        index2--
    }
    if left == 1 {
        result = fmt.sprintf("1%s", result)
    }
    return
}

分析:

1.go实现大数相加,面试常见问题

2.实现思想:人的思维,从个位依此加到最高位

 

demo6:

package main

import "fmt"

func test() int {
    defer func() {
        if err := recover(); err != nil {
            fmt.println(err)
        }
    }()
    b := 0
    a := 100 / b
    return a
}

func main() {
    test()
}

分析:

1.go没有try,catch语句,应该用这里的方式

 

demo7:

package main

import "fmt"

func test() {
    i := new(int)
    fmt.println(i)  //0xc000012088
    fmt.println(*i) //0

    s1 := new([]int)
    *s1 = make([]int, 5)
    fmt.println(s1) //&[0 0 0 0 0]

    s2 := make([]int, 5)
    fmt.println(s2) //[0 0 0 0 0]

    (*s1)[0] = 100
    s2[0] = 100
    fmt.println(s1) //&[100 0 0 0 0]
    fmt.println(s2) //&[100 0 0 0 0]
}

func main() {
    test()
}

分析:

1.make和new的区别练习

 

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网