java 基础编程练习18

题目描述:
小乐乐从老师口中听到了二段数这个名词,想更深入的了解二段数。

二段数是这样的正整数:恰好包含两种不同的十进制数字s和t,s不是0,并且s的所有出现均排列在所有的t的前面。例如,44444411是二段数(s是4,t是1),41、10000000和5555556也是。但4444114和44444都不是二段数。

这时老师问小乐乐:给你一个任意的正整数n,你能求出比n大并且是n的倍数的最小二段数吗?请你帮助小乐乐解答这个问题。

输入描述:
多组输入,每组输入包含一个正整数n (1 ≤ n ≤ 99999)

题目保证测试数据总数不超过500组,当输入n=0时程序结束。

输出描述:
对于每组测试用例,输出正整数n,后面紧跟“: ”,输出答案并换行,即比n大且是n的倍数的最小二段数。

示例1
输入

1
2019
0

输出

1: 10
2019: 9999999993

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner in=new Scanner(System.in);
        long n=in.nextLong();
        while(n!=0){
            int i=2;
            while(is_two(n*i)==false){//找寻n的倍数
                i++;
            }
            System.out.println(n+":"+n*i);
            n=in.nextLong();
        }
    }

	//判断是否是二段数的函数
    public static boolean is_two(long num){
        String s=""+num;//先将long转换为字符串
        char [] c=s.toCharArray();//再转换为字符数组
        int isNum=0;
        for(int i=1;i<c.length;i++){
            if(c[i]!=c[i-1]){//从左往右遍历,要是有数字的变换就加1
                isNum++;
            }
        }
        if(isNum==1){//只有变换一次,也就是只有两种数字
            return true;
        }
        else{
            return false;
        }
    }
}