1

長い数字の文字列の一部である数桁の乗算結果を計算しようとしています。これが私のコードです:

package main

import (
    "fmt"
    "strconv"
)

func main() {
    inputNum := "73167176531330624919225119"
    mult := getMult(3, inputNum)

    fmt.Printf("Mult = %d", mult)

}

func getMult(startIndex int, inputNum string) int {
    mult := 0
    for i := 0; i < 10; i++ {

        digit, err := strconv.Atoi(string(inputNum[startIndex+i]))

        if err != nil {
            mult *= int(digit)
        } else {
            fmt.Printf("Error converting %s to int  : %s\n", string(inputNum[startIndex+i]), err.Error())
        }

    }
    return mult
}

取得したい結果は 6*7*1*7*6*5*3*1*3*3 = 238140 です

しかし、私は実行時エラーを取得しています:

パニック: ランタイム エラー: 無効なメモリ アドレスまたは nil ポインター逆参照 [signal 0xc0000005 code=0x0 addr=0x20 pc=0x40130e]

goroutine 1 [実行中]: main.getMult(0x3, 0x534d40, 0x1a, 0x4d2701) test.go:25 +0x17e main.main() test.go:10 +0x55 終了ステータス 2

4

2 に答える 2

1

あなたのコードは、次の 2 つのタイプミスを修正することで 機能し
ます。 mult := 0mult := 1
err != nilerr == nil

package main

import (
    "fmt"
    "strconv"
)

func main() {
    inputNum := "73167176531330624919225119"
    mult := getMult(3, inputNum)
    fmt.Printf("Mult = %d", mult)
}

func getMult(startIndex int, inputNum string) int {
    mult := 1
    for i := 0; i < 10; i++ {
        digit, err := strconv.Atoi(string(inputNum[startIndex+i]))
        if err == nil {
            mult *= int(digit)
        } else {
            fmt.Printf("Error converting %s to int  : %s\n", string(inputNum[startIndex+i]), err.Error())
        }
    }
    return mult
}

inputNum[3:13]また、インデックス 3 から長さ 10 の新しい文字列を取得するために使用することもできます。また、1 文字を整数に変換するために
使用することもできます。 次に、次のように使用します。 int(v - '0')
for range

package main

import "fmt"

func main() {
    inputNum := "73167176531330624919225119"
    mult := getMult(inputNum[3:13])
    fmt.Printf("Mult = %d \n", mult) // Mult = 238140
}

func getMult(str string) int {
    m := 1
    for _, v := range str {
        if v >= '0' && v <= '9' {
            m *= int(v - '0')
        } else {
            fmt.Printf("Error converting %q to int\n", v)
            break
        }
    }
    return m
}

出力:

Mult = 238140
于 2016-07-01T07:16:41.777 に答える