关于#java#的问题:用java求一个自然数N,将6提到最前面所得数是N的4倍

用java求一个自然数N,个位数是6,将6提到最前面所得数是N的4倍。


public class Ch11_5 {
    public static void main(String[] args) {

        int n = 0;//代表6的前面部分,“n6”
        int N;//6移动前,即N=n6
        int M;//6移动到数字首部后,即M=6n
        int buf;
        int i = 0;//代表数字的长度

        while(true){
//移动前
            N = n * 10 + 6;
            buf = n;
            //计算数字的长度,确定6移到首部的权重,即:6代表的是十位还是百位等等
            while(buf!=0) {
                i++;
                buf = buf/10;
            }
            //移动后
            M = (int)(6 * Math.pow(10,i)) + n;
            //条件满足,输出,退出循环
            if(M == (4*N)){
                System.out.print("要找的数为:"+N);
                break;
            }
            n++;//穷举变量修改
            i = 0;//长度值复位
        }
    }
}
public static void main(String[] args) {
        int N = 16;//从16开始计算
        int wei = 10;//两位数*10,三位数*100以此类推
        while (true) {
            int temp = N / 10;//降一位
            if (N * 4 == 6 * wei + temp) {
                System.out.println(N);
                break;
            } else {
                temp++;
                if (temp % wei == 0) {//进位了
                    wei *= 10;
                }
                N = temp * 10 + 6;
            }
        }

    }

  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/226016
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:实现算数游戏功能关键算法。Java判断输入的数字有几位数。Java计算正整数 n 每个数位上的数之积
  • 除此之外, 这篇博客: Java初级面试题中的 69、JAVA中如何确保N个线程可以访问N个资源,但同时又不导致死锁? 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 使用多线程的时候,一种非常简单的避免死锁的方式就是:指定获取锁的顺序,并强制线程按照指定的顺序获取锁。因此,如果所有的线程都是以同样的顺序加锁和释放锁,就不会出现死锁了。

    预防死锁,预先破坏产生死锁的四个条件。互斥不可能破坏,所以有如下三种方法:

    • 1.破坏请求和保持条件,进程必须等所有要请求的资源都空闲时才能申请资源,这种方法会使资源浪费严重(有些资源可能仅在运行初期或结束时才使用,甚至根本不使用). 允许进程获取初期所需资源后,便开始运行,运行过程中再逐步释放自己占有的资源,比如有一个进程的任务是把数据复制到磁盘中再打印,前期只需获得磁盘资源而不需要获得打印机资源,待复制完毕后再释放掉磁盘资源。这种方法比第一种方法好,会使资源利用率上升。

    • 2.破坏不可抢占条件,这种方法代价大,实现复杂。

    • 3.破坏循坏等待条件,对各进程请求资源的顺序做一个规定,避免相互等待。这种方法对资源的利用率比前两种都高,但是前期要为设备指定序号,新设备加入会有一个问题,其次对用户编程也有限制。

  • 您还可以看一下 黄桂钊老师的Java面试题突击100道课程中的 递归必备掌握题目(N的阶乘&斐波那契数列)小节, 巩固相关知识点