如果x加上x的各个位数字之和得到y,就说x是y的生成元;给出n,(1<=n<=100000),求最小生成元。无解输出0.
例如,n=216,121,2005时的解分别为198,0,1979。
198 + 1 + 9 + 8 = 216;
1979 + 1 + 9 + 7 + 9 = 2005;
我的思路如下:
1.从0找到n所有的数字
2.将这些数字转成String存入ArrayList<String>中
3.遍历这些数字
4.利用charAt()来获取每个数字的下标,再将他们转换为Integer类型。
5.继续遍历每个数字,把他们数字下标进行相加。
6.如果结果跟n相等,则当前的数字便是,而且也是最小。
public class TheLeastNumber {
public static ArrayList<String> changeToString( int n ){
ArrayList<String> arrayList = new ArrayList<String>();
for( int i = 0 ; i < n ; i++ ){
arrayList.add(i+"");
}
return arrayList;
}
public static int findTheNumber(int n){
ArrayList<String> arrayList = changeToString(n);
for(String s : arrayList){
int temp = Integer.parseInt(s);
for(int j = 0 ; j<= s.length()-1 ; j++ ){
temp += Integer.parseInt(s.charAt(j)+"");
}
if( temp == n ){
return Integer.parseInt(s);
}
}
return 0;
}
public static void main(String [] args){
System.out.println(findTheNumber(216));
System.out.println(findTheNumber(121));
System.out.println(findTheNumber(2005));
}
}