如何在 java 中得到特定基数的倒数?

How to get reverse of number with specific base in java?

我是 java 的新手。我只是在写一个函数来接受一个数字及其基数作为参数,然后显示回文数(如果有的话)。主要问题是我不太明白如何反转10以外的基数?我写的代码(根据我糟糕的逻辑)如下:

 void   CheckPalidrome(    int num,    int base)
    {
        long     n=num;
        
        boolean palid=false;
        long TNum= num;
        for(int i=1;    i<=10   &&  palid==false;  ++i)    
        {   
            int     rev=0;
            while(n>0 )
            {
                int d= (int) (n%base);
                rev=    rev*base  + d;
            
                n/=base;
            }
            if(TNum==rev)
            {
                palid=true;
            }
            else{
                n=TNum+rev;
                TNum=n;
            }
            
            System.out.println("TNum= "+TNum+"\trev="+rev);
        
        }
        
        if(palid==true){
            System.out.println("Palidrome= "+TNum);
        }
        else{
            System.out.println("None, "+TNum);
        }
    }

但是,这里面有个问题。它适用于任何数量的 10 基数。但不适用于另一个基数。例如:- 以 10 为底数的 87 将被反转并检查它是否是回文,如果不是,则反转和数字将被添加并再次检查就像: 87+78=165+561=726+627=1353+3531=回文!

但我不知道如何对除 10 以外的其他基地执行此操作。 注意:1211 以 3 为底形成回文 112211 和 3112 以 4 为底形成回文 233332。我使用这些结果来测试我的代码。但是输出不匹配。


请原谅我糟糕的英语。请分享您的知识或给我任何解决问题的想法。我会很高兴和感谢你:)

你的逻辑好像不错,但是记得在给定的base.

中解析并打印数字

例如数字 1211(基数 3)与 49(基数 10)相同。

为了看到这个,我像这样重写了你的代码:

private static int findPalindrome(int num, int base) {
    for (int n = num, rev; n > 0; n += rev) {
        if ((rev = reverse(n, base)) == n)
            return n;
        System.out.printf("%-6s + %-6s", Integer.toString(n, base), Integer.toString(rev, base));
        if (base != 10)
            System.out.printf("   = (%-4d + %-4d) ", n, rev);
        System.out.printf("%n  = ");
    }
    return 0;
}
private static int reverse(int num, int base) {
    int rev = 0;
    for (int n = num; n != 0; n /= base)
        rev = rev * base + n % base;
    return rev;
}

然后这样测试:

public static void main(String[] args) {
    test("87", 10);
    test("1211", 3);
    test("3112", 4);
}
private static void test(String num, int base) {
    System.out.printf("%2d: ", base);
    int p = findPalindrome(Integer.parseInt(num, base), base);
    System.out.printf("%-15s", Integer.toString(p, base));
    if (base != 10)
        System.out.printf("   = (%-11d)", p);
    System.out.printf("%n%n");
}

产生了这个输出:

10: 87     + 78    
  = 165    + 561   
  = 726    + 627   
  = 1353   + 3531  
  = 4884           

 3: 1211   + 1121     = (49   + 43  ) 
  = 10102  + 20101    = (92   + 172 ) 
  = 100210 + 12001    = (264  + 136 ) 
  = 112211            = (400        )

 4: 3112   + 2113     = (214  + 151 ) 
  = 11231  + 13211    = (365  + 485 ) 
  = 31102  + 20113    = (850  + 535 ) 
  = 111221 + 122111   = (1385 + 1685) 
  = 233332            = (3070       )

()中的数字是以10为底的数字。其他号码显示在 :.

之前列出的 base