欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Go基础(3)

程序员文章站 2022-10-05 09:23:17
demo1: 分析: 1.基本的99乘法表打印练习 demo2: 分析: 1.判断1-10000有哪些完数的练习 demo3: 分析: 1.判断是否是回文字符串的练习 2.尤其注意中文字符的处理,使用rune demo4: 分析: 1.读取一串输入并对字符进行技术的程序 2.对常用其他包的简单使用 ......

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的区别练习