c++ 超大整數除法 高精度除法
阿新 • • 發佈:2022-05-21
c++ 超大整數除法 高精度除法
解題思路
計算a/b,其中a為大整數,b為普通整數,商為c,餘數為r。
根據手算除法的規則,上一步的餘數記為r,則本次計算的被除數為t=r*10+被除數的本位數值a[i],商t/b,本步餘數為t%b
除法是從最高位開始計算的,所以需要反轉reverse一下,才能保持和前面加減乘一樣的資料儲存
打卡程式碼
#include<bits/stdc++.h> using namespace std; vector<int> div(vector<int> a,int b,int& r){ vector<int> c; int t; for(int i=a.size()-1;i>=0;--i){ t=r*10+a[i]; c.push_back(t/b); r=t%b; } reverse(c.begin(),c.end()); while(c.size()>1 && c.back() == 0) c.pop_back(); return c; } int main(){ string s; vector<int> a,c; int b; cin>>s>>b; for(int i=s.size()-1;i>=0;--i){ a.push_back(s[i]-'0'); } int r; c=div(a,b,r); for(int i=c.size()-1;i>=0;--i){ cout<<c[i]; } cout<<endl<<r; return 0; }