区间内能被3整除的数字个数

小Q得到一个神奇的数列: 1, 12, 123,…12345678910,1234567891011…。

并且小Q对于能否被3整除这个性质很感兴趣。

小Q现在希望你能帮他计算一下从数列的第l个到第r个(包含端点)有多少个数可以被3整除。

输入描述:

输入包括两个整数l和r(1 <= l <= r <= 1e9), 表示要求解的区间两端。

输出描述:

输出一个整数, 表示区间内能被3整除的数字个数。

示例1
输入
2 5
输出
3
说明
12, 123, 1234, 12345…
其中12, 123, 12345能被3整除。

解1:

public class Main {

    public static int divide(int l, int r){
        int count = 0;
        int a = 0;
        StringBuffer sbl = new StringBuffer("");
        StringBuffer sbr = new StringBuffer("");
        for (int i = 1; i <= r; i++){
            if (i < l){
                sbl.append(i);
            }
            if (i >= l){
                sbr = sbl;
                sbr.append(i);
                a = Integer.parseInt(sbr.toString());
//                System.out.println("a =" + sbr);
                if (a % 3==0)
                    count ++;

            }
        }
        return count;
    }
    public static void main(String[] args) {

        divide(2,5);
    }
}

解2:

public class Main {
    /*
    1,12,123,1234,....,12345678910,1234567891011的数列
    从第l个到第r个数,有多少个能被3整除
     */
    public static int divide(int l,int r){
        int count = 0;
        int intl = 0;
        StringBuilder sbl = new StringBuilder("");
        StringBuilder sbr = new StringBuilder("");
        for(int i = 1; i <= r ; i++){//1-5
            if(i < l ){//1-L
                sbl.append(i);
              //  System.out.println("l=="+sbl);
            }
            if(i >= l){
                sbr = sbl;
                sbr.append(i);
                intl = Integer.parseInt(sbl.toString());
             //   System.out.println("r=="+intl);
                if(intl % 3 == 0 )
                    count ++ ;
            }
        }
        return count;
    }
   
    public static void main(String[] args) {
      //  System.out.println(
            divide(2,5);
        //);
    }
}

你可能感兴趣的:(Practice,collections)