给出两个数字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上失败?我的解决方案是否产生了正确的输出?
答案 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);
}
}
希望这有助于理解。 (但是,您需要检查其他相关的例外以获得良好的编程习惯)