找因数,找相同

来源:互联网 发布:网络咨询流程图 编辑:程序博客网 时间:2024/04/27 13:59

问题:
小象有一个数字A,它想找出满足一下要求的数字的个数:
1.这个数字必须是A的因数
2.这个数字中至少有一位数字与A中的数字相同(例如:A=100,B =1,A的1和0中有一个1与B中的1相同)

请求出满足要求的数字的个数

 

import java.util.Scanner;public class Main{public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();int sum = 0;if(n==1)System.out.println(1);else{sum=1;String s = String.valueOf(n);if(s.contains("1"))sum++;for(int i = 2;  i<=Math.sqrt(n);i++){if(n%i==0){String s1 = String.valueOf(n);String s2 = String .valueOf(i);String s3 = String .valueOf(n/i);if(same(s1,s2)){sum++;}if(n/i !=i &&same(s1,s3)){sum++;}}}System.out.println(sum);}}public static boolean same(String s1,String s2){for(int i = 0 ; i < s1.length();i++){for(int j = 0 ;j<s2.length();j++){if(s1.charAt(i)==s2.charAt(j)){return true;}}}return false;}}


 

关键:
1.对输入的数字A进行循环,在循环中逐个判断得到A的因数
2.在循环确定的因数中进一步判断,判断所得到的因数与A中是否有相同的数字,如果有就给result+1


技巧:
1.先判断特殊值 A=1。如果A = 1,首先,1的因数只有1,而且1和本身有相同的数字,结果就是1,所以,如果输入A=1,那直接输出结果1
2.如果A!=1,那就需要循环判断,循环从2开始,到sqrt(A)结束。为什么呢?因为,一个数的两个因数,一个偏小,一个偏大,以sqrt(A)为界限。所以,判断了i之后,就可以利用 A/i得到另一个因数
3.判断过程中,最外层的循环,表示判断从2到sqrt(A)的所有数,如果找到了因数,那么,先将三个数 A,i , A/i 转为字符串(因为要进一步判断是否有相同的数字),对于这个因数,判断,是否和A有相同的数字,如果有,就给结果+1。然后与这个If并列的再来一个if判断,判断是否A/i也与A有相同的数字,并且i!=A/i(如果相等,说明他们两个含有的数字相同,在结果中只需要计算一次);如果满足条件,就表明,另一个因数不和这个因数相等,并且还与A含有相同的数字


 

原创粉丝点击