在java中,如何使用特定的基来获得数字的倒数?
我是java新手。我刚刚编写了一个函数,接受一个数字及其基数作为参数,然后显示回文数字(如果有)。主要的问题是,我没有完全理解如何反转10以外的基数?我编写的代码(根据我糟糕的逻辑)如下所示:在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(
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)。我给出了错误的输出。如果你明白了,请指出我逻辑中的错误。:)谢谢!你太棒了:)