华为OJ——(练习用)挑7

时间:2022-03-16 11:27:46

题目描述

输出7有关数字的个数,包括7的倍数,还有包含7的数字(如17,27,37...70,71,72,73...)的个数


输入描述:
 
 

一个正整数N。(N不大于30000)

输出描述:
 
 

不大于N的与7有关的数字个数,例如输入20,与7有关的数字包括7,14,17.

输入例子:
20
输出例子:
3

两种思路:

1、依次遍历要检测数的每个位上的数字,如果包含7就符合要求

2、把要检测的数变成字符串,如果包含7的话就符合要求

方法一:

import java.util.*;
public class Main{

	public static void main(String[] args) {
		
		Scanner scan=new Scanner(System.in);
		while(scan.hasNext()){
			int N=scan.nextInt();
			int count=0;
			for(int i=1;i<=N;i++){
				int muber=i;
				if(muber%7==0){//7的倍数符合要求
					count++;   
				}
				else{
					//依次遍历要检测数的每个数字,如果包含7就符合要求
					while(muber>0){
						if(muber%10==7){
						 count++;
						 muber/=10;
						 break; //这里一定要加break,一个数字,一旦有一个7,立马退出循环,查下个数
						 }
						else
							muber/=10;	
					}
				}
			}
			System.out.println(count);
		}
	}
}
方法二:

import java.util.*;
public class Main{

	public static void main(String[] args) {

		Scanner scan=new Scanner(System.in);
		while(scan.hasNext()){
			Integer N=scan.nextInt();
			int count=0;
			for(Integer i=1;i<=N;i++){
				if(i%7==0) //7的整数倍自然是对的
					count++; 
					//把要检测的数变成字符串,如果包含7的话也符合要求
				else if(i.toString().contains("7")) 
					count++;
			}
			System.out.println(count);
		}
	}
}