2019-02-26-PAT乙级-1017-A除以B

2019-02-26-PAT乙级-1017-A除以B

2019-02-26-PAT乙级-1017-A除以B

原文链接:PAT乙级-1017-A除以B

github代码地址:HibisciDai/OJ-PAT-ACM

2019-02-26-PAT乙级-1017-A除以B

编程描述

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

辅助描述

1
2
3
4
5
作者: CHEN, Yue
单位: 浙江大学
时间限制: 100 ms
内存限制: 64 MB
代码长度限制: 16 KB

输入格式

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

输出格式

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

输入样例

1
123456789050987654321 7

输出样例

1
17636684150141093474 3

算法实现

JAVA(openjdk)

直接进行int运算一定超过数字范围,采用java大数类超时,模拟除法运算模式进行一步步除和余。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
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);
}
}

运行结果

1
2
3
4
5
6
7
8
状态	分数	题目	编译器	耗时	用户	
答案正确 20 1017 Java (openjdk) 91 ms HibisciDai
测试点 结果 耗时 内存
0 答案正确 81 ms 15232 KB
1 答案正确 85 ms 15832 KB
2 答案正确 83 ms 12964 KB
3 答案正确 91 ms 16020 KB
4 答案正确 89 ms 15772 KB
文章作者: HibisciDai
文章链接: http://hibiscidai.com/2019/02/26/2019-02-26-PAT乙级-1017-A除以B/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 HibisciDai
支付宝打赏
微信打赏