Java 从a^b右侧查找第k位的输出与预期不符?

Java 从a^b右侧查找第k位的输出与预期不符?,java,Java,给定两个数字a和b,从a^b的右边找到第k位 有关问题的链接: 我的方法: 我取了4个数字作为输入。首先是测试用例的数量。然后,输入分别是数字a、b和k(用空格分隔)。我计算a^b,然后从右键搜索每个数字,直到第k个数字不等于计数。如果它们相等,我返回预期的剩余数 代码如下: public static void main (String[] args) { Scanner sc=new Scanner(System.in); int T=sc.nextIn

给定两个数字a和b,从a^b的右边找到第k位

有关问题的链接:

我的方法:

我取了4个数字作为输入。首先是测试用例的数量。然后,输入分别是数字a、b和k(用空格分隔)。我计算a^b,然后从右键搜索每个数字,直到第k个数字不等于计数。如果它们相等,我返回预期的剩余数

代码如下:

public static void main (String[] args) 
{
       Scanner sc=new Scanner(System.in);
          int T=sc.nextInt();

          for(int i=1;i<=T;i++)
          { 
              int count=1;
              int a=sc.nextInt();
              System.out.print(" ");
              int b=sc.nextInt();
               System.out.print(" ");
              int k=sc.nextInt();
              long result=(long) Math.pow(a,b);
              if(k!=count)
              {
                  while(k!=count)
                  {
                      count++;
                      int remainder=(int) (result%10);
                      result=result/10;

                  }
              }
              result=result%10;
              System.out.println(result);
          }
    }


GeeksId Output:                  

Wrong !! Here your code Failed 

Input: 

7 6 3 

And its Correct output is: 

6
publicstaticvoidmain(字符串[]args)
{
扫描仪sc=新的扫描仪(System.in);
int T=sc.nextInt();

对于(int i=1;i,您似乎没有遵循问题的方向。问题为您提供了一些约束。您不需要对这些约束进行检查。您应该添加代码来检查,以便确保不会遇到任何异常

我想指出的是,您只需将
Math.pow(a,b)
结果转换为字符串,然后使用charAt函数打印
length-k
字符。这将非常简单。并且消除循环

该部分的代码为:

String tempString = String.valueOf(result);
System.out.println(tempString.charAt(tempString.length() - k));

希望这能让您找到正确的方向。

您似乎没有遵循问题的方向。问题给了您一些限制。您不需要检查这些限制。您应该添加代码来检查这些限制,以便确保不会遇到任何异常

我想指出的是,您只需将
Math.pow(a,b)
结果转换为字符串,然后使用charAt函数打印
length-k
字符。这将非常简单。并且消除循环

该部分的代码为:

String tempString = String.valueOf(result);
System.out.println(tempString.charAt(tempString.length() - k));

希望这能让您找到正确的方向。

也可以通过这种方式完成,无需进行太多的字符串操作,也不需要中间输出a^b以长数据类型存储

private void handle() {
    Scanner scanner = new Scanner(System.in);
    int T = scanner.nextInt();
    for(int i = 0; i < T; i++) {
        findKthDigit(scanner);
    }
    scanner.close();
}

private void findKthDigit(Scanner scanner) {
    int a = scanner.nextInt();
    int b = scanner.nextInt();
    int k = scanner.nextInt();
    System.out.println((int)((Math.pow(a, b) % Math.pow(10, k))
            / Math.pow(10, k-1)));
}
private void handle(){
扫描仪=新的扫描仪(System.in);
int T=scanner.nextInt();
for(int i=0;i
根据要求,对您的程序进行修改,使其在GFG系统中工作

    public static void main (String[] args) 
    {
      Scanner sc=new Scanner(System.in);
      int T=sc.nextInt();

      for(int i=1;i<=T;i++)
      { 
          int count=1;
          int a=sc.nextInt();
          //System.out.print(" ");
          int b=sc.nextInt();
          // System.out.print(" ");
          int k=sc.nextInt();
          long result=(long) Math.pow(a,b);
          if(k!=count)
          {
              while(k!=count)
              {
                  count++;
                  int remainder=(int) (result%10);
                  result=result/10;

              }
          }
          result=result%10;
          System.out.println(result);
      }
}
publicstaticvoidmain(字符串[]args)
{
扫描仪sc=新的扫描仪(System.in);
int T=sc.nextInt();

for(int i=1;i也可以通过这种方式完成,无需进行太多的字符串操作,也不需要中间输出a^b以长数据类型存储

private void handle() {
    Scanner scanner = new Scanner(System.in);
    int T = scanner.nextInt();
    for(int i = 0; i < T; i++) {
        findKthDigit(scanner);
    }
    scanner.close();
}

private void findKthDigit(Scanner scanner) {
    int a = scanner.nextInt();
    int b = scanner.nextInt();
    int k = scanner.nextInt();
    System.out.println((int)((Math.pow(a, b) % Math.pow(10, k))
            / Math.pow(10, k-1)));
}
private void handle(){
扫描仪=新的扫描仪(System.in);
int T=scanner.nextInt();
for(int i=0;i
根据要求,对您的程序进行修改,使其在GFG系统中工作

    public static void main (String[] args) 
    {
      Scanner sc=new Scanner(System.in);
      int T=sc.nextInt();

      for(int i=1;i<=T;i++)
      { 
          int count=1;
          int a=sc.nextInt();
          //System.out.print(" ");
          int b=sc.nextInt();
          // System.out.print(" ");
          int k=sc.nextInt();
          long result=(long) Math.pow(a,b);
          if(k!=count)
          {
              while(k!=count)
              {
                  count++;
                  int remainder=(int) (result%10);
                  result=result/10;

              }
          }
          result=result%10;
          System.out.println(result);
      }
}
publicstaticvoidmain(字符串[]args)
{
扫描仪sc=新的扫描仪(System.in);
int T=sc.nextInt();


对于(int i=1;iConstraints for 7^6=?它不跨越任何约束。它产生了什么异常?请检查以下内容:
1是的,我会记住这些情况。谢谢。除此之外,我认为我生成输出的方式与预期的输出不同。您能指导我将要进行哪些更改吗made@Jasonarora, 删除您拥有的两行
system.out.print(“”;
行。这将解决问题。您的代码是正确的,但输出不一致。如果这解决了您的问题,请投票/标记正确。如果您需要进一步的帮助,我很乐意提供帮助。谢谢:)约束7^6=?它不会跨越任何约束。它会产生什么异常?请检查以下约束:
1是的,我会记住这些情况。谢谢。除此之外,我认为我生成输出的方式与预期的输出不同。您能指导我将要进行哪些更改吗made@Jasonarora,移除您有两行
system.out.print(“”;
行。这应该可以解决问题。您的代码是正确的,但输出不一致。如果这解决了您的问题,请投票/标记正确。如果您需要进一步的帮助,我很乐意提供帮助。谢谢:)@Jason arora您的程序是正确的,但是您的输出行前面有两个空格,Geeksforgeks系统希望输出一个整数,因此您的程序按照系统的要求失败。解决方案:注释两行,
//system.out.print(“”;../system.out.print(“”);
GFG系统会通过的。是的,你指对了。你能编辑代码吗?我的代码你想说什么?我需要评论的地方。谢谢。从你的代码我知道GFG系统会自动在输入为T,a,b的行中插入那些空格,其中T是测试用例的数量。a是第一个数字,b是第二个数字是第二个数字。因为这个问题是关于数字操作的,所以可以用几种方法来完成。我看到了你共享的GFG问题链接,其中有一个标签被称为[Math],所以它可以用简单的数学方程来求解。任何数字(kth)都可以用基本模和10^x除法来检索。因此((a^b)%(10^k))/(10^(k-1))。这是一个很好的数学。您在查看了模式后概括了这一点。做得好。@Jason arora您的程序是正确的,但您的输出行前面有两个空格,Geeksforgeks系统希望输出一个整数,因此您的程序根据系统失败。解决方案:注释两行,
//system.out.print(“”);…//System.out.print(“”)