这是一个小时候常玩的一个游戏,一时兴起,将其转换为代码,在浏览了部分相同案例,发现大多存在的案例,在判断是否为包含7,或者是7的倍数时所使用的规则如下:
if(num / 7 == 0 || num / 10 % 10 == 7 || num % 10 == 7 ){
......
}
这个规则是成立的,但是也同样是有限的,当数量超过1000时,百位数无法进行识别,必然性的就会产生需求错误,此时需要再增加百位数判断即可。(ps:虽然现实中游玩此游戏不可能报出数字过大,上百属实少见)
但好奇心总是要有的,超过100、1000、10000之后的逢7数会有哪些,人力计算肯定是费劲的,那就让代码来试一试。
public static void main(String[] args) {
/**
* 案例:逢7过
* 需求:从任意数开始,当数字包含7或者是7的倍数,则报过,否则输出数字
*
* 分析:
* 7、17、27、37、47、57、67、70-79、87、97....非法
* 14、21、28、35、42、49、56、63....非法
* 倍数使用7整除余数为0即可判断
* 包含7,可采用(77 / 10 % 10 )取出十位,(17 % 10)取个位判断,
* 此处因不设置计数范围,因此采用获取个、十、百...等各个位置上的数字
* 判断当前位置是否为7
*/
//定义开始数字和结束数字
int startNum,endNum;
//定义两个键盘输入器
System.out.println("请输入开始数字");
Scanner startNumSc = new Scanner(System.in);
startNum = startNumSc.nextInt();
System.out.println("请输入结束数字");
Scanner endNumSc = new Scanner(System.in);
endNum = endNumSc.nextInt();
//循环判断
while (startNum<=endNum){
//设置临时变量,将变量转化为字串,方便捕捉各个位数是否存在7
String temp = new Integer(startNum).toString();
int len = temp.length();
//设置result作为后续判断当前数字是否为含7数的辅助变量
boolean result = false;
//循环判断是否包含7,若包含7,则修改result,判定为需跳过数
for (int i = 0 ; i < len; i++){
if (temp.charAt(i) == '7'){
result = true;
}
}
//输出结果
if (result ||startNum % 7 == 0){
System.out.println("过 ");
}else {
System.out.println(startNum+" ");
}
startNum++;
}
}
这里使用的规则,是选择将输入的开始数字(startNum)进行String类型转换,通过chatAt()来判断每个位置的字符时候为7 ,这样就不需要在数字位数不断上涨后,人工的去增加判断位数算法。
这段代码个人测试是没有问题的,当然有更好的写法,或者程序有误欢迎指出,新人编程,喷轻点^ v ^