Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中,如何使用特定的基来获得数字的倒数?_Java_Reverse_Palindrome_Base - Fatal编程技术网

在java中,如何使用特定的基来获得数字的倒数?

在java中,如何使用特定的基来获得数字的倒数?,java,reverse,palindrome,base,Java,Reverse,Palindrome,Base,我是java新手。我刚刚编写了一个函数,接受一个数字及其基数作为参数,然后显示回文数字(如果有)。主要的问题是,我没有完全理解如何反转10以外的基数?我编写的代码(根据我糟糕的逻辑)如下所示: void CheckPalidrome( int num, int base) { long n=num; boolean palid=false; long TNum= num; for(

我是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);
        }
    }
void CheckPalidrome(int num,int base)
{
长n=num;
布尔palid=false;
长TNum=num;
对于(int i=1;i0)
{
int d=(int)(n%基数);
转速=转速*基准+d;
n/=基数;
}
如果(TNum==rev)
{
palid=true;
}
否则{
n=TNum+rev;
TNum=n;
}
System.out.println(“TNum=“+TNum+”\trev=“+rev”);
}
如果(palid==true){
System.out.println(“Palidrome=“+TNum”);
}
否则{
System.out.println(“无,+TNum);
}
}
但是,这里面有一个问题。它适用于任何数量的基数10。但对另一个基地不起作用。例如,如果是回文,以10为底的-87将被反转并检查,如果不是,则反转和数字将被添加并再次检查,如下所示: 87+78=165+561=726+627=1353+3531=回文

但我不知道如何为其他基地,除了10。 注:以3为基数的1211表示回文112211,以4为基数的3112表示回文233332。我使用这些结果来测试我的代码。但是输出不匹配



请原谅我的英语不好。请分享您的知识或给我任何解决问题的想法。我将非常高兴并感谢您:)

您的逻辑似乎很好,但请记住在给定的
基中解析并打印数字

例如,编号
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");
}
然后像这样测试它:

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为基数的数字。其他数字显示在
基底
前面列出的

基底的要求是什么?第二个参数的基数是什么?先生,当我在第二个参数(十进制)中以10为基数时,它工作得很好。但如果我给它另一个基数,比如八进制(8)。我给出了错误的输出。如果你明白了,请指出我逻辑中的错误。:)谢谢!你太棒了:)