1017 A除以B (20 分)
阿新 • • 發佈:2021-10-21
原題
程式碼
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(可以表示不可變的任意精度的整數)
參看部落格
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; }