PAT A除以B(乙級)||(非獨立)

 

題目描述

本題要求計算A/B,其中A是不超過1000位的正整數,B是1位正整數。你需要輸出商數Q和餘數R,使得A = B * Q + R成立。

 

輸入描述:

 

輸入在1行中依次給出A和B,中間以1空格分隔。

 

 

輸出描述:

 

 

在1行中依次輸出Q和R,中間以1空格分隔。

 

輸入例子:

 

123456789050987654321 7

 

輸出例子:

 

17636684150141093474 3

 

package Test;
import java.util.Scanner;

public class Main{
    public static void main(String [] args){
        Scanner in=new Scanner(System.in);
        String s=in.next();
        int n=in.nextInt();
        int R=0;
        char chs[]=s.toCharArray();
        StringBuffer sb=new StringBuffer();
        for(int i=0;i<chs.length;i++){
            int a=R*10+Integer.parseInt(String.valueOf(chs[i]));
            sb.append(a/n);
            R=a%n;
        }
        if(Integer.parseInt(String.valueOf(sb.charAt(0)))==0)
        		sb.delete(0, 1);
        System.out.println(sb.toString()+" "+R);
    }
}

這題看起來很簡單,但那個超長的數字我想了很久也不知道怎麼解決。然後就看了大佬的答案。

果然自己題還是做少了,沒有什麼數學思維。

在這道題中,基本類型是無法包含這個數字的(我曾看到測試數字長達數百位),所以只能將這個數字一個個拆開,但是我數學又不是很好,沒能想到下面這個方法。

        StringBuffer sb=new StringBuffer();
        for(int i=0;i<chs.length;i++){
            int a=R*10+Integer.parseInt(String.valueOf(chs[i]));    
            sb.append(a/n);
            R=a%n;
        }
        if(Integer.parseInt(String.valueOf(sb.charAt(0)))==0)
        sb.delete(0, 1);
        System.out.println(sb.toString()+" "+R);

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章