gpt4 book ai didi

go - Project Euler #145 循环中的结果太多

转载 作者:IT王子 更新时间:2023-10-29 01:57:38 26 4
gpt4 key购买 nike

我正在尝试为 Project Euler #145 创建一个解决方案.我正在用 Go 编写。当我运行我的程序时,我得到的结果是 125。预期结果是 120。我有 2 种不同的方法来尝试编写代码,但都得出了相同的答案。任何指出我的错误的帮助将不胜感激。

Code option #1使用字符串:

package main

import (
"fmt"
"strconv"
)

//checks to see if all the digits in the number are odd
func is_Odd(sum int) bool {
intString := strconv.Itoa(sum)

for x := len(intString); x > 0; x-- {
newString := intString[x-1]
if newString%2 == 0 {
return false
}
}
return true
}

//reverse the number passed
func reverse_int(value int) int {

intString := strconv.Itoa(value)

newString := ""

for x := len(intString); x > 0; x-- {
newString += string(intString[x-1])
}

newInt, err := strconv.Atoi(newString)

if err != nil {
fmt.Println("Error converting string to int")
}

return newInt
}

//adds 2 int's passed to it and returns an int
func add(x int, y int) int {
return x + y
}

func main() {
//functions test code
/*y := 35
x := reverse_int(y)
z := add(x,y)
fmt.Println(is_Odd(z))*/

counter := 1

for i := 1; i < 1000; i++ {
flipped := reverse_int(i)
sum := add(flipped, i)
oddCheck := is_Odd(sum)
if oddCheck {
fmt.Println(counter, ":", i, "+", flipped, "=", sum)
counter++
}
}
counter--
fmt.Println("total = ", counter)

}

Code option #2仅使用整数:

package main

import (
"fmt"
)

var counter int

//breaks down an int number by number and checks to see if
//all the numbers in the int are odd
func is_Odd(n int) bool {

for n > 0 {
remainder := n % 10
if remainder%2 == 0 {
return false
}
n /= 10
}
return true
}

//adds 2 int's passed to it and returns an int
func add(x int, y int) int {
return x + y
}

//reverses the int passed to it and returns an int
func reverse_int(n int) int {
var new_int int
for n > 0 {
remainder := n % 10
new_int *= 10
new_int += remainder
n /= 10
}
return new_int
}

func main() {
//functions test code
/*y := 35
x := reverse_int(y)
z := add(x,y)
fmt.Println(is_Odd(z))*/

counter = 1

for i := 1; i < 1000; i++ {
flipped := reverse_int(i)
sum := add(flipped, i)
oddCheck := is_Odd(sum)
if oddCheck {
//fmt.Println(counter,":",i,"+",flipped,"=",sum)
counter++
}
}
counter--
fmt.Println(counter)

}

最佳答案

在 n 或 reverse(n) 中都不允许使用前导零,因此在 reverse(n int) int 中删除前导零,如下所示:

remainder := n % 10
if first {
if remainder == 0 {
return 0
}
first = false
}

try this :

package main

import (
"fmt"
)

//breaks down an int number by number and checks to see if
//all the numbers in the int are odd
func isOdd(n int) bool {
if n <= 0 {
return false
}
for n > 0 {
remainder := n % 10
if remainder%2 == 0 {
return false
}
n /= 10
}
return true
}

//adds 2 int's passed to it and returns an int
func add(x int, y int) int {
return x + y
}

//reverses the int passed to it and returns an int
func reverse(n int) int {
first := true
t := 0
for n > 0 {
remainder := n % 10
if first {
if remainder == 0 {
return 0
}
first = false
}
t *= 10
t += remainder
n /= 10
}
return t
}

func main() {
counter := 0
for i := 0; i < 1000; i++ {
flipped := reverse(i)
if flipped == 0 {
continue
}
sum := add(flipped, i)
if isOdd(sum) {
counter++
//fmt.Println(counter, ":", i, "+", flipped, "=", sum)
}
}
fmt.Println(counter)
}

输出:

120

关于go - Project Euler #145 循环中的结果太多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46358942/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com