Java解决8除不尽的数

问题如下:
一个自然数N被8除余1,所得的商N1被8除也余1,
而第二次的商N2(N2 为N1 除以8的结果) 被8除后余7,将第二次的商N2再除以8得到一个商为a.
又知这个自然数N被17除的余数是4.这个N被17除之后的商为M,M被17除之后得到商为B,余数为15, 又知道B是a的2倍.

解答解惑:
首先这道题是要用到死循环加break来写,其次分开他的条件,分为两部分,一部分是N % 一个数后等于多少  ;另一部分是 M 和 a 和 B 的判式,我们需要思维反转来想这道题,
代码如下 请认真看注释:

import java.util.*;
public class Main {
public static void main(String[] args) 
{
    int n = 0;
    while(true)
    {
        if(n % 8 == 1 &&     //  1个自然数N被8除余1,
                n/8%8 == 1 && //所得的商N1被8除也余1
                n/64%8 == 7 && //N2(N2 为N1 除以8的结果) 被8除后余7  n2就是 n/8/8 等价于 n/64
                n % 17 ==4 && //这个自然数N被17除的余数是4
                (2*(n/512)) == (n/(17*17)) &&  //将第二次的商N2再除以8得到一个商为a 这个N被17除之后的商为M,M被17除之后得到商为B,又知道B是a的2倍.
                n/17%17 == 15)//这个N被17除之后的商为M,M被17除之后得到商为B且余数为15
            
        {System.out.print(n);
            break;}
        n++;
    }
}    
}

那就是 把这两部分分开来判断,如果有符合 打印出后跳出循环,
其中后面的判断是比较难理解的  那些  512 和 64  都是 8*8*8 和 8*8   和 n/8/8/8 和 n/8/8  是等价的,希望这点要明白。

2020年11月8日 08:19:09

本文来自博客园,作者:咸瑜,转载请注明原文链接:https://www.cnblogs.com/bi-hu/p/13943373.html

原文地址:https://www.cnblogs.com/bi-hu/p/13943373.html