2016-01-19 24 views
0

給定兩個數字a和b,從^ b的右邊找到第k個數字?分別從a^b右邊找到第k位數字的輸出不符合預期?

我把4號作爲Input.First是測試cases.Then的數量,輸入是數字AB以及k:

鏈接的問題:

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

MyApproach (由空格分隔)。我計算出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:

輸入:

輸出

Wny我在geeksId上失敗了嗎?我的解決方案是不是產生正確的輸出?

回答

1

也可以做這樣沒有太多的字符串操作,而不是期待中輸出一個^ 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); 
     } 
} 

希望這有助於理解。 (但是,您需要檢查其他相關的例外以進行良好的編程練習)

+0

爲什麼我的回答出錯了。 –

+1

@Jason arora你的程序是正確的,但是你的輸出行預先配置了兩個空格,GeeksforGeeks系統需要一個Integer作爲輸出,因此你的程序按照系統失敗。 解決方法: 註釋兩行, '// System.out.print(「」); ... // System.out.print(「」);' 和GFG系統將通過。 –

+0

是的,你指出它的權利。你可以編輯代碼我的代碼你想說什麼?我需要評論的地方。 –

2

看起來好像你沒有按照問題的方向。這個問題給你一些限制。你不檢查那些。你應該添加代碼來檢查它,所以它會確保你不會遇到任何異常。

我想指出的是,您可以將Math.pow(a,b)結果轉換爲字符串,然後使用charAt函數打印length - k char。這將使它非常容易。並擺脫循環。

代碼的部分是:

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

希望這讓你在正確的方向。

+0

7^6 =的約束它不跨越任何約束。它產生的異常 –

+0

以及檢查以下內容的約束: '1 <= T <= 100' 1 = a,b <= 15' '1 <= k <= |在^ b中的總數字'' 您應該始終通過程序進行輸入驗證。你有什麼可以工作,但是這是不正確的,因爲有人可以爲b輸入-4,這會搞亂你的數學。pow(a,b)' – deltashade

+0

是的,你是對的我會記住情況。謝謝。除了這件事,我認爲我產生輸出的方式不同於預期輸出。你能指導我做什麼變化製作 –

相關問題