小编Ste*_*ams的帖子

项目欧拉#22与Golang; 每次都会返回不同的结果

我正在使用Go进行Project Euler的问题22,我是新手,我的代码给出了不一致的结果,这意味着每次运行程序时它都会显示不同的结果.它总是非常接近我所看到的正确答案,但范围在几百点之内.我原本以为它可能是由于浮动舍入不准确但我已经检查过,事实并非如此(我认为).如果有人能够指出可能会导致这种情况发生的事情,我将非常感激.几天来,我一直在努力寻找我的代码问题而无法解决它甚至在论坛上发现类似的问题.作为旁注,我最初使用golang math/big包编写了这个,并且获得了相同的更改结果.

package main

import (
    "fmt"
    "io/ioutil"
    "log"
    "math"
    "strings"
)

func openFileReturnSlice(f string) []string {
    bytes, err := ioutil.ReadFile(f)
    if err != nil {
        log.Fatal("Failed to read file: p022_names.txt")
    }
    s2s := strings.Split(string(bytes), "\"")
    s22 := strings.Join(s2s, "")
    names := strings.Split(s22, ",")
    return names
}

func alphabetize(n []string) ([]string, map[string]int) {
    wordsValues := make(map[string]float64)
    wordLetterVal := make(map[string]int)
    for _, s := range n {
        loop := -1
        var wordValue float64
        alpha := int(0)
        for _, l := …
Run Code Online (Sandbox Code Playgroud)

go

8
推荐指数
1
解决办法
193
查看次数

Golang:奇怪的大Int行为

所以我是Go的新手,对编程总体上缺乏经验,所以我希望我不会因为提出愚蠢的问题而再次投票.我正在通过项目euler问题和问题25"1000位Fibonacci数字"工作我遇到了似乎奇怪的行为.以下是我编写的导致此行为的代码.

package main

import (
    "fmt"
    "math/big"
)

func main() {
    index := 2
    l := new(big.Int)
    pl := big.NewInt(1)
    i := big.NewInt(1)
    for {
        l = i
        i.Add(i, pl)
        pl = l
        index++
        if len(i.String()) == 1000 {
            break
        }
    }
    fmt.Println(i, "\nindex: ", index)
}
Run Code Online (Sandbox Code Playgroud)

当然,这并没有产生正确的答案所以在确定为什么我发现我无意中发现了一种产生2的幂的简洁方法的过程中.我做了以下更改,这确实产生了正确的结果.

package main

import (
    "fmt"
    "math/big"
)

func main() {
    index := 2
    l := new(big.Int)
    pl := big.NewInt(1)
    i := big.NewInt(1)
    for {
        l.Set(i)
        i.Add(i, pl)
        pl.Set(l)
        index++
        if len(i.String()) == …
Run Code Online (Sandbox Code Playgroud)

biginteger go bigint

-1
推荐指数
1
解决办法
161
查看次数

标签 统计

go ×2

bigint ×1

biginteger ×1