根据http://studygolang.com/articles/3900改进
用“数学公式”法解下题:
有一个整数n,写一个函数f(n),返回0到n之间出现的"1"的个数。 比如f(13)=6,现在f(1)=1,问下一个最大的f(n)=n的n是什么?
func f(n int) int { c := 0 for i := 0; i <= n; i++ { c += count(i) } return c } func count(num int) int { c := 0 for n := num; n > 0; n = n / 10 { if n == 1 || n%10 == 1 { c += 1 } } return c } func main(){ t := time.Now() r := 0 for i := 1; i < 100000000; i++ { r += count(i) if r == i { fmt.Printf("n:%d, f(n):%d\n", i, r) if i != 1 { fmt.Println("stop at:", i) break } } } fmt.Println("time is:", time.Now().Sub(t).String()) }
有疑问加站长微信联系(非本文作者)