找出10位数字难题的算法

用户名

要确定数字是否可以被7整除,请从数字中减去最后一位数字,将其加倍,然后从剩余数​​字中减去加倍的数字。如果结果可被7整除(例如14、7、0,-7等),则数字可被7整除。这可能需要重复几次。示例:3101被7整除吗?

 310   - take off the last digit of the number which was 1
  -2   - double the removed digit and subtract it
 308   - repeat the process by taking off the 8
-16    - and doubling it to get 16 which is subtracted
 14    - the result is 14 which is a multiple of 7 

以下是我用来获取号码的代码:

    for(int O =0; O <= 9 ; O++) {
            String a = String.valueOf(number[0]);
            String b = String.valueOf(number[1]);
            String c = String.valueOf(number[2]);
            String d = String.valueOf(number[3]);
            String e = String.valueOf(number[4]);
            String f = String.valueOf(number[5]);

            String h = a+b+c+d+e+f;
            int abcdef = Integer.valueOf(h);
            if ( (abcdef -(2*O) % 7) ==0 )
                number [6] = O;

    }

但是,它并没有给我这样的数字,我能够得到一个直到6的数字,直到每个数字都能被相应的索引整除(如果我以1,而不是0开头)。这意味着索引1可以被1整除,索引2可以被2整除,索引3可以被3整除,......索引7可以被7整除。我想形成这样的数字。请注意,我可以通过以下方式在不使用算法的情况下完成了此操作:

     for(int O =0; O <= 9 ; O++) {
        String a = String.valueOf(number[0]);
        String b = String.valueOf(number[1]);
        String c = String.valueOf(number[2]);
        String d = String.valueOf(number[3]);
        String e = String.valueOf(number[4]);
        String f = String.valueOf(number[5]);
        String g = String.valueOf(O);
        String h = a+b+c+d+e+f+g;
        int abcdefg = Integer.valueOf(h);
        if ( (abcdefg % 7) ==0 )
            number [6] = O;

}

但是,我真的很想使用我在开始时描述的算法来做到这一点。

迈克尔·马克迪斯(Michael Markidis)

调用代码示例

int [] num = new int [7];
for (int i = 1000000; i < 9999999; i++)
{
    // put i into the array and check it
    if (checkDigitsDivisible(i, num))
    {
        System.out.println(i);
    }
}

检查一个数字的前几位数是否可以被1整除,前两位数可以被2除数,前3位可以被3除数,依此类推。

public static boolean checkDigitsDivisible (int num, int [] arr)
{
    int one = num / 1000000;
    int two = num / 100000;
    int three = num / 10000;
    int four = num / 1000;
    int five = num / 100;
    int six = num / 10;
    int seven = num;

    arr[0] = one % 10;
    arr[1] = two % 10;
    arr[2] = three % 10;
    arr[3] = four % 10;
    arr[4] = five % 10;
    arr[5] = six % 10;
    arr[6] = seven % 10;

    return (one % 1 == 0) && 
           (two % 2 == 0) && 
           (three % 3 == 0) && 
           (four % 4 == 0) && 
           (five % 5 == 0) && 
           (six % 6 == 0) &&
           (isDivisibleBy7(seven));
}

一种检查数字是否可被7整除的递归解决方案(问题中所述的算法):

public static boolean isDivisibleBy7 (int n)
{       
    n = Math.abs(n);

    if (n == 0 || n == 7 || n == 14)
    {
        return true;
    }
    else
    {
        int lastDigit = n % 10;
        int lastDigitOff = n / 10;

        int remainder = lastDigitOff - (lastDigit * 2);

        remainder = Math.abs(remainder);

        if (remainder > n)
        {
            return false;
        }

        return isDivisibleBy7(remainder);
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

找出10位数字难题的算法

来自分类Dev

创建随机的MSISDN 10位数字

来自分类Dev

以4或6开头的10位数字

来自分类Dev

附加零以使10位数字

来自分类Dev

要求输入10位数字

来自分类Dev

HashSet排序算法,1到9位数字

来自分类Dev

将8位数字转换为char的算法的优化

来自分类Dev

Java将8位数字转换为10位

来自分类Dev

从10位数字中获取所有可能的连续4位数字

来自分类Dev

JAVA ISBN-10编号:第10位数字

来自分类Dev

Java:唯一的10位数字ID

来自分类Dev

在python中将2位数字分为10和1

来自分类Dev

在JavaScript中精确匹配10位数字

来自分类Dev

Ruby Array-删除前10位数字

来自分类Dev

带有0-10位数字的矩形

来自分类Dev

从字符串中提取10位数字

来自分类Dev

如何在FreeSwitch中拨打10位数字的电话?

来自分类Dev

将一列转换为10位数字

来自分类Dev

查找两组10位数字的并集

来自分类Dev

从文件名中删除前10位数字

来自分类Dev

如何提取10位数字excel列

来自分类Dev

该程序可以正常工作,最多9位数字,但失败时只有10位数字

来自分类Dev

通过插入一位数字来获得最大可能数的高效算法

来自分类Dev

登录:用********代替10位数字,最后两位

来自分类Dev

生成3位数字

来自分类Dev

解密4位数字

来自分类Dev

分割4位数字

来自分类Dev

产生2位数字,这些数字加起来至少为10

来自分类Dev

找出数组中位数最多的数字