解题思路

  • 此题用穷举法,穷举所有情况,对所有情况进行分类讨论,大类里可能还会需要进行在分类讨论
  • 先分为7的倍数和含有7的数
  • 含有7的数可分为7在个位和7不在个位的情况
package main

import "fmt"

/*
选出与7有关的数
1: 7的倍数 n%7==0
2:17,27,37,47, 173 n%10 == 7
*/

func main() {
    var num int
    for {
        if n, _ := fmt.Scan(&num); n == 0 {
            return
        }
        count := 0
        for i := 7; i <= num; i++ {
            //case 1: 范围内所有7的倍数关系的数
            if i%7 == 0 || check(i) {
                count++
            }
        }
        fmt.Println(count)
    }

}

// case 2:含有7的数 17,27,37,171....
func check(i int) bool {
    for i != 0 {
        if i%10 == 7 {
            return true
        }
        // case2的特殊情况,数 >100 173 => 17
        i /= 10
    }
    return false
}