1017 A除以B (20 分)
原题
代码
java题解
运行超时版
package pat;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;
/*
模拟实际的除法运算。
注意点:从最高位开始运算,上一位运算的余数与下一位读取到的字符组合,作为当前的被除数。
*/
public class Main {
public static void main(String[] args) throws IOException {
//System.in是InputStream类型,用转换流转换成字节流,再套了一层缓冲流
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
String str= bufferedReader.readLine();
bufferedReader.close();
String[] split = str.split("\\s+");
String NumA=split[0];
int NumB=Integer.parseInt(split[1]);
int current=0;
int remainder=0;//余数
int quotient=0;//当前的商
StringBuilder sb = new StringBuilder();
for (int i=0;i<NumA.length();i++){
current=NumA.charAt(i)-48;
quotient=(remainder*10+current)/NumB;
remainder=(remainder*10+current)%NumB;
sb.append(quotient);//拼接商
}
//去掉Q首位的0
if (sb.charAt(0)=='0'){
System.out.print(sb.substring(1, sb.length()));
}
else System.out.print(sb);
System.out.print(" "+remainder);
}
}
使用java.Math.BigInteger(可以表示不可变的任意精度的整数)
代码来源
这个还是运行超时的,不过通过的得分点更多了。(看运气)
package pat;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.math.BigInteger;
/**
* 主要借助了强大的工具类,一步到位
*/
public class Test {
public static void main(String[] args) throws IOException {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
String[] split = bufferedReader.readLine().split(" ");
bufferedReader.close();
BigInteger NumA = new BigInteger(split[0]);
BigInteger NumB = new BigInteger(split[1]);
BigInteger divide = NumA.divide(NumB);//商
BigInteger mod = NumA.mod(NumB);//余数
System.out.print(divide+" "+mod);
}
}
C++版
话说C++太适合做算法题了吧
代码来源
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s;
int b = 0, j = 0, temp = 0;
cin >> s >> b;
for (int i = 0; i < s.length(); i++)
{
j = (temp * 10 + s[i] - '0') / b; //商
temp = (temp * 10 + s[i] - '0') % b; //余
if (j == 0 && i == 0 && s.length() != 1);
else cout << j;
}
cout << ' ' << temp << endl;
return 0;
}