亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將 Project Euler #8 移植到 Go

將 Project Euler #8 移植到 Go

Go
素胚勾勒不出你 2021-08-30 14:57:18
我正在努力學習 Go,我決定使用 Project Euler 來幫助我。我正在嘗試將 #8 移植到 Go。這是在 Javascript 中// Split our input into an arrayn = n.split("");// Loop through every 13 length chuck multiplying them. Keep track of the largestvar largest = 0;for (var i = 0; i < (n.length - 12); i++) {    var b = n.slice(i, i + 13);    var product = b.reduce(function(prev, current) {        return prev * Number(current);    }, 1);    if (product > largest) {        largest = product;    }}console.log(largest);這是我在 Go 中的端口import (    "fmt"    "strconv"    "strings")func main() {    // Get an array of ints    var grid []int    var stringGrid []string = strings.Split(data, "")    for i := 0; i < 1000; i++ {        cell, _ := strconv.Atoi(stringGrid[i])        grid = append(grid, cell)    }    // Find the largest one    largest := 0    for i := 0; i < len(grid)-12; i++ {        a := grid[i : i+13]        total := 1        for b := 0; b < len(a); b++ {            total *= a[b]        }        if total > largest {            largest = total        }    }    fmt.Println(largest)}我不知道出了什么問題,如果我給它們加上一堆打印,就會吐出相同的數字序列,但是 Go 似乎沒有在做乘法,對吧????我手動檢查了一遍。一定是我遺漏了一些小東西嗎?
查看完整描述

1 回答

?
藍山帝景

TA貢獻1843條經驗 獲得超7個贊

你遇到了整數溢出。所有 javascript 數字都是 64 位雙精度數,因此具有 53 位整數精度。在 Go 中,int類型為 32 位或 64 位,具體取決于您的處理器。對您來說,int是 32 位,因此它無法存儲與解決方案一樣大的數字。您可以使用int32和int64類型指定要使用的大小整數。下面是修正后的程序。有關整數溢出的更多信息,請參見此處。這里是 Go 規范中的相關部分。


package main


import (

    "fmt"

    "strconv"

    "strings"

)


var data string = "7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450"


func main() {

    // Get an array of ints

    var grid []int64

    var stringGrid = strings.Split(data, "")

    for i := 0; i < 1000; i++ {

        cell, _ := strconv.Atoi(stringGrid[i])

        grid = append(grid, int64(cell))

    }


    // Find the largest one

    var largest int64

    for i := 0; i < len(grid)-12; i++ {

        a := grid[i : i+13]

        var total int64 = 1

        for b := 0; b < len(a); b++ {

            total *= a[b]

        }

        if total > largest {

            largest = total

        }

    }

    fmt.Println(largest)

}


查看完整回答
反對 回復 2021-08-30
  • 1 回答
  • 0 關注
  • 194 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號