package main import ( "fmt" "strconv" ) func main() { /* 编写一个算法来判断一个数是不是“快乐数”。 一个“快乐数”定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1, 也可能是无限循环但始终变不到 1。如果可以变为 1,那么这个数就是快乐数。 示例: 输入: 19 输出: true 解释: 1**2 + 9**2 = 82 8**2 + 2**2 = 68 6**2 + 8**2 = 100 1**2 + 0**2 + 0**2 = 1 */ for i := 19; i < 2021; i++ { s := strconv.Itoa(i) res := happy(s) if res == "快乐数" { fmt.Println("是快乐数:", i) } else if res == "OK" { fmt.Println("非快乐数:", i) } } } func happy(n string) string { //str := string(n[0]) //fmt.Println(str) //1 //fmt.Printf("%T ", str) //string //str2 := string(n[1]) //fmt.Printf("%T ", str2) //string //a, _:= strconv.Atoi(str) //b, _ := strconv.Atoi(str2) //str3 := str + str2 //fmt.Println(str3) //19 //fmt.Println(a+b) //10 if len(n) == 2 { //fmt.Println("==") a, _ := strconv.Atoi(string(n[0])) b, _ := strconv.Atoi(string(n[1])) sum := a*a + b*b fmt.Println("len(2)", n, sum) if sum == 1 { //fmt.Println("恭喜找到快乐数") return "快乐数" } sum2 := strconv.Itoa(sum) return happy(sum2); } else if len(n) == 3 { //fmt.Println("====") a, _ := strconv.Atoi(string(n[0])) b, _ := strconv.Atoi(string(n[1])) c, _ := strconv.Atoi(string(n[2])) sum := a*a + b*b + c*c fmt.Println("len(3)", n, sum) if sum == 1 { //fmt.Println("恭喜找到快乐数") return "快乐数" } sum2 := strconv.Itoa(sum) return happy(sum2); } else if len(n) == 4 { //fmt.Println("=====") a, _ := strconv.Atoi(string(n[0])) b, _ := strconv.Atoi(string(n[1])) c, _ := strconv.Atoi(string(n[2])) d, _ := strconv.Atoi(string(n[3])) sum := a*a + b*b + c*c + d*d fmt.Println("len(4)", n, sum) if sum == 1 { //fmt.Println("恭喜找到快乐数") return "快乐数" } sum2 := strconv.Itoa(sum) return happy(sum2); } /*else if len(n) == 1 { //fmt.Println("=====") a, _ := strconv.Atoi(string(n[0])) sum := a*a //fmt.Println("len(1)",sum) if sum == 1 { //fmt.Println("恭喜找到快乐数") return "快乐数" } sum2 := strconv.Itoa(sum) return happy(sum2); }*/ /*上面的代码报错 运行时:goroutine堆栈超过100000000字节的限制 致命错误:堆栈溢出*/ return "OK" //如果len为1,就直接return结束函数 } /* 是快乐数: 1995 非快乐数: 1996 非快乐数: 1997 非快乐数: 1998 非快乐数: 1999 非快乐数: 2000 非快乐数: 2001 非快乐数: 2002 是快乐数: 2003 非快乐数: 2004 非快乐数: 2005 非快乐数: 2006 非快乐数: 2007 是快乐数: 2008 非快乐数: 2009 非快乐数: 2010 非快乐数: 2011 非快乐数: 2012 非快乐数: 2013 非快乐数: 2014 非快乐数: 2015 非快乐数: 2016 非快乐数: 2017 非快乐数: 2018 是快乐数: 2019 非快乐数: 2020 */