找因数,找相同

问题:
小象有一个数字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含有相同的数字


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值