Go 对于Project Euler#145,循环中的结果太多
我正在尝试为您创建一个解决方案。我正在用围棋写作。当我运行程序时,结果是125。预期结果是120。我有两种不同的方法尝试编写代码,但都得到了相同的答案。如果有人帮我指出错误,我们将不胜感激 使用字符串: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
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