编程求一个9位的整数,数字由1-9构成,每个数字只能出现一次。并且这个整数的前一位能被1整除,前两位能被2整除, ......以此类推,前九位能被9整除。

思路分析:9位的整数,由不重复的1~9组成,注意分析出没有0。

每个数字只出现一次,那么最小的数是123456789,最大的数是987654321。

既然不重复,那么把每一位获取,比较9个数字不同即可。怎样比较,9个数字用a!=b&&a!=c......可不行,

想想把获取的数字放到数组里面,通过冒泡排序法比较数字是否有重复即可。不要说冒泡排序只能用来排序......

改良下代码就可以用了。

不为0且数字都不一样两个条件满足后,继续进行判断。

用一个循环判断前两位被2整除,前三位被3整除,......,前九位被9整除。条件满足输出,结束。

答案:381654729

详细代码如下:

public class testLargeNumber {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int[] wei = new int[9]; //每一位
		int flag;
		int i, num,cnt=0,n,sum=0;//统计不相等和不为0的数量

		for (i = 123456789; i <= 987654321; i++) {
			num = i; //初始化num,如果直接用i,后面会变,小心!
			flag = 0;//用于判断是否满足条件
			// 计算每一位
			for (int j = 0; j < 9; j++) {
				wei[j] = num % 10;
//				System.out.println(wei[j]);
				num = num / 10;
			}
			// 判断有0或相等
			for (int k = 0; k < 9; k++) {
				if (wei[k] == 0) {
					flag = 1;
					break;
				}
				for (int m = k + 1; m < 9; m++) {
					if (wei[k] == wei[m]) {
						flag = 1;
						break;//跳出内循环
					}
				}
				if(flag==1){
					break;//跳出外循环
				}
			}
			//满足无0和每位都不相等,继续判断前几位被几整除
			if (flag == 0) {
				cnt=0;//计数置为0
				sum=wei[8];
				for(n=8;n>=1;n--){
					sum=sum*10+wei[n-1];
					if(sum%(10-n)==0){
						cnt++; //计数增加
					}
				}
				if(cnt==8){//前2位被2整除到前9位被9整除有8个
					System.out.println(i); //这里用到i了,之前用num来执行
				}
			}
		}
//		System.out.println(cnt);
	}
}

你可能感兴趣的:(编程求大数)