从^ b右边找到第k位的输出不符合预期?

时间:2016-01-19 05:35:42

标签: java

  

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

问题的链接:

http://www.practice.geeksforgeeks.org/problem-page.php?pid=302

MyApproach:

我把4个数字作为输入。首先是测试用例的数量。然后,输入分别是数字ab和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

Eclipse ID:

输入:

7 6 3

输出

6

  

Wny我在geeksId上失败?我的解决方案是否产生了正确的输出?

2 个答案:

答案 0 :(得分:2)

好像你没有按照问题的方向行事。这个问题给你一些限制。你不做那些检查。您应该添加代码来检查,因此它将确保您不会遇到任何异常。

我想指出您可以将Math.pow(a,b)结果转换为字符串,并使用charAt函数打印length - k字符。这将使它变得非常容易。并摆脱了循环。

该部分的代码是:

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

希望这会让你朝着正确的方向前进。

答案 1 :(得分:1)

也可以这样做,没有太多的String操作,也不希望中间输出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)));
}

根据要求,修改您的程序以使其在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);
      }
}

希望这有助于理解。 (但是,您需要检查其他相关的例外以获得良好的编程习惯)