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

Go学习(1):基本语法简单应用

程序员文章站 2022-06-23 22:33:48
今天开始学Go了,技多不压身 基本语法大体来说感觉是:Python和Java的融合 具体的基本语法就不写了,大概写个简易的算法熟悉下这个语言 大数相加Go实现: package main import ( "bufio" "fmt" "os" "strings" ) /** 大数相乘 */ func ......

今天开始学go了,技多不压身

基本语法大体来说感觉是:pythonjava的融合

 

具体的基本语法就不写了,大概写个简易的算法熟悉下这个语言

大数相加go实现:

package main

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

/**
大数相乘
*/

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

func split(input string) (first string, second string) {
    //分割输入
    strslice := strings.split(input, "+")
    if len(strslice) != 2 {
        fmt.println("input error")
        os.exit(0)
    } else {
        first = strings.trimspace(strslice[0])
        second = strings.trimspace(strslice[1])
        if first == "" || second == "" {
            fmt.println("input error")
            os.exit(0)
        }
    }
    return
}

func printresult(first, second, result string) {
    //打印结果
    fmt.printf("%s + %s = %s\n", first, second, result)
}

func add(str1, str2 string) (result string) {
    //大数相加
    if len(str1) == 0 && len(str2) == 0 {
        result = "0"
    } else {
        //从个位开始
        index1 := len(str1) - 1
        index2 := len(str2) - 1
        //carry表示进位
        carry := 0
        //从各位开始依次相加
        for index1 >= 0 && index2 >= 0 {
            //ascii码相减得出数值
            c1 := str1[index1] - '0'
            c2 := str2[index2] - '0'
            //模拟人算带进位相加
            sum := int(c1) + int(c2) + carry
            //进位处理
            if sum >= 10 {
                carry = 1
            } else {
                carry = 0
            }
            //得出项加后每一位的值
            c3 := (sum % 10) + '0'
            //拼接字符串
            result = fmt.sprintf("%c%s", c3, result)
            index1--
            index2--
        }
        //第一个数的位数比第二个多的时候执行
        for index1 >= 0 {
            //原理和上面类似
            c1 := str1[index1] - '0'
            sum := int(c1) + carry
            if sum >= 10 {
                carry = 1
            } else {
                carry = 0
            }
            c3 := (sum % 10) + '0'
            result = fmt.sprintf("%c%s", c3, result)
            index1--
        }
        //第二个数的位数比第一个多的时候执行
        for index2 >= 0 {
            c1 := str2[index2] - '0'
            sum := int(c1) + carry
            if sum >= 10 {
                carry = 1
            } else {
                carry = 0
            }
            c3 := (sum % 10) + '0'
            result = fmt.sprintf("%c%s", c3, result)
            index2--
        }
        //处理最终进位
        if carry == 1 {
            result = fmt.sprintf("1%s", result)
        }
    }
    return
}

func main() {
    //输入两个数
    first, second := split(input())
    //得到相加结果
    result := add(first, second)
    //打印
    printresult(first, second, result)
}

 

测试:

Go学习(1):基本语法简单应用