PAT 乙级 1017 A除以B (20分) (JAVA版)

    技术2023-12-04  99

    1017 A除以B (20分)

    本题要求计算 A/B,其中 A 是不超过 1000 位的正整数,B 是 1 位正整数。你需要输出商数 Q 和余数 R,使得 A=B×Q+R 成立。

    输入格式:

    输入在一行中依次给出 A 和 B,中间以 1 空格分隔。

    输出格式:

    在一行中依次输出 Q 和 R,中间以 1 空格分隔。

    输入样例:

    123456789050987654321 7

    输出样例:

    17636684150141093474 3

    自己答案:第一版

    package pat; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main1017 { /** * 1017 A除以B (20分) 本题要求计算 A/B,其中 A 是不超过 1000 位的正整数,B 是 1 位正整数。你需要输出商数 Q 和余数 R,使得 * A=B×Q+R 成立。 * * 输入格式: 输入在一行中依次给出 A 和 B,中间以 1 空格分隔。 * * 输出格式: 在一行中依次输出 Q 和 R,中间以 1 空格分隔。 * * 输入样例: 123456789050987654321 7 输出样例: 17636684150141093474 3 作者 CHEN, Yue 单位 * 浙江大学 代码长度限制 16 KB 时间限制 100 ms 内存限制 64 MB * @throws IOException * */ public static void main(String[] args) throws IOException { BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); String[] ab = bufferedReader.readLine().split(" "); bufferedReader.close(); long a=Long.parseLong(ab[0]); long b=Long.parseLong(ab[1]); String res = ""; res = a / b + " " + a % b; System.out.println(res); } }

    他人版:

    import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException; //A不超过1000位,但已经超出了数字范围,所以要用字符串或字符数组的形式处理 //注意边界情况,1个是商可能是0开头的,1个是商可能刚好为0。 public class Main { public static void main(String[] args) throws IOException { BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); String[] input = in.readLine().split("\\s+");//将被除数A与除数B分开为两个字符串 String A = input[0];//A int B = Integer.valueOf(input[1]);//提取B的数值 StringBuilder result = new StringBuilder();//商结果,用来存储商的结果。当需要频繁改变一个字符串时,用StringBuilder效率更高 int shang = 0, yu = 0;//存储每一位商和余数的值 boolean zero = true;//用来标记第一次商非0的情况 for(int i = 0; i < A.length(); i++)//对A字符串中的每位数字进行除以B的运算 { shang = ((A.charAt(i)-'0') + yu*10) / B; yu = ((A.charAt(i)-'0') + yu*10) % B; if(zero == true)//如果之前的商都为0 { if(shang == 0)//这次的商也为0,则跳过 continue; else { zero = false;//这次的商不为0了,则改变标志 } } result.append(shang);//将第一次非0商的之后的商都添加到商结果 } if(result.length() == 0 )//如果商结果什么都没有,就是0 result.append(0); System.out.print(result + " " + yu); } }

     

    Processed: 0.013, SQL: 9