找因数,找相同
来源:互联网 发布:网络咨询流程图 编辑:程序博客网 时间: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含有相同的数字
- 找因数,找相同
- HDU1215找因数之和
- WOJ1203-找相同
- WOJ1204-继续找相同
- WOJ-203 找相同
- 17.2指针找相同字母
- WOJ 1204 继续找相同
- BZOJ4566 [Haoi2016]找相同字符
- [bzoj4566][HAOI2016]找相同字符
- 【bzoj4566】[Haoi2016]找相同字符
- bzoj4566【HAOI2016】找相同字符
- 4566: [Haoi2016]找相同字符
- [HAOI2016]找相同子串
- 两个数组找相同元素
- 4566: [Haoi2016]找相同字符
- 【bzoj4566】[Haoi2016]找相同字符
- 两数组找相同元素
- WOJ-204 继续找相同
- 线程和进程的联系和区别
- 【ACMICPC Chengdu Online】1004 数论,类Fib
- 浅淡Servlet技术
- [统计数对] 题解
- 生成 一定范围内的随机数
- 找因数,找相同
- android数据存储(shared preferences)
- mmc子系统学习笔记三 mmc子系统知识储备
- 2012天津赛区网络赛第二题---Number(hdu4279)
- 一个字符串转化为整数
- fork() 问题
- 文献关键词共现矩阵python实现
- 【ACMICPC Chengdu Online】1009 贪心
- 小米手机销售额已达60.5亿元