Go 对于Project Euler#145,循环中的结果太多

Go 对于Project Euler#145,循环中的结果太多,go,Go,我正在尝试为您创建一个解决方案。我正在用围棋写作。当我运行程序时,结果是125。预期结果是120。我有两种不同的方法尝试编写代码,但都得到了相同的答案。如果有人帮我指出错误,我们将不胜感激 使用字符串: package main import ( "fmt" "strconv" ) //checks to see if all the digits in the number are odd func is_Odd(sum int) bool { intString

我正在尝试为您创建一个解决方案。我正在用围棋写作。当我运行程序时,结果是125。预期结果是120。我有两种不同的方法尝试编写代码,但都得到了相同的答案。如果有人帮我指出错误,我们将不胜感激

使用字符串:

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)

}
主程序包
进口(
“fmt”
“strconv”
)
//检查数字中的所有数字是否为奇数
func是奇数(和整数)布尔{
intString:=strconv.Itoa(总和)
对于x:=len(intString);x>0;x--{
新闻字符串:=intString[x-1]
如果新闻字符串%2==0{
返回错误
}
}
返回真值
}
//倒数
func reverse_int(值int)int{
intString:=strconv.Itoa(值)
新闻字符串:=“”
对于x:=len(intString);x>0;x--{
newString+=string(intString[x-1])
}
newInt,err:=strconv.Atoi(newString)
如果错误!=零{
fmt.Println(“将字符串转换为int时出错”)
}
返回newInt
}
//添加传递给它的2个int并返回一个int
func add(x int,y int)int{
返回x+y
}
func main(){
//函数测试代码
/*y:=35
x:=反向整数(y)
z:=加(x,y)
fmt.Println(是奇数(z))*/
计数器:=1
对于i:=1;i<1000;i++{
翻转:=反转(i)
总和:=相加(翻转,i)
oddCheck:=奇数(和)
如果是奇数检查{
fmt.Println(计数器,“:”,i,“+”,翻转,“=”,总和)
柜台++
}
}
柜台--
fmt.Println(“总计=,计数器)
}
仅使用INT:

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)

}
主程序包
进口(
“fmt”
)
变量计数器int
//按数字分解整数并检查是否
//整数中的所有数字都是奇数
func是奇数(n int)布尔{
对于n>0{
余数:=n%10
如果余数%2==0{
返回错误
}
n/=10
}
返回真值
}
//添加传递给它的2个int并返回一个int
func add(x int,y int)int{
返回x+y
}
//反转传递给它的整数并返回一个整数
func reverse_int(n int)int{
var new_int
对于n>0{
余数:=n%10
new_int*=10
new_int+=余数
n/=10
}
返回新的\u int
}
func main(){
//函数测试代码
/*y:=35
x:=反向整数(y)
z:=加(x,y)
fmt.Println(是奇数(z))*/
计数器=1
对于i:=1;i<1000;i++{
翻转:=反转(i)
总和:=相加(翻转,i)
oddCheck:=奇数(和)
如果是奇数检查{
//fmt.Println(计数器,“:”,i,“+”,翻转,“=”,总和)
柜台++
}
}
柜台--
fmt.Println(计数器)
}
一些正整数n具有和[n]的性质+ 反向(n)]完全由奇数(十进制)数字组成。例如, 36+63=99和409+904=1313。我们将调用这些数字 可逆的;所以36、63、409和904是可逆的。前导零是 不允许在n或反向(n)中使用

总和的所有数字都必须是奇数。


试试这个:

您忽略了这部分条件:


n或反向(n)中都不允许前导零


您计算为可逆的数字中有五个以
0
结尾。(这意味着它们的反面有一个前导零。)停止将它们计算为可逆的,您就完成了。

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

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


有道理,我没有看到我没有删除,因为它没有显示,当我在终端打印。
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