高精度除法
给定两个非负整数(不含前导 00) A,B,请你计算 A/B 的商和余数。
输入格式
共两行,第一行包含整数 A,第二行包含整数 B。
输出格式
共两行,第一行输出所求的商,第二行输出所求余数。
数据范围
1≤A的长度≤100000,
1≤B≤10000,
B 一定不为 0
输入样例:
输出样例:
因为除法是从高位开始算,加减法和乘法都是从低位开始,所以除法其实不用倒序存储数据。但是为了和前边保持一致,同样采用倒序存储。
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
| #include<iostream> #include<vector> #include<algorithm> using namespace std;
vector<int> div(vector<int> a,int b,int &r){ vector<int> c; for(int i=a.size()-1;i>=0;i--){ r=r*10+a[i]; c.push_back(r/b); r%=b; } reverse(c.begin(),c.end()); while(c.size()>1&&c.back()==0) c.pop_back(); return c; }
int main(){ string a; int b; cin>>a>>b; vector<int> n; int r=0; for(int i=a.size()-1;i>=0;i--) n.push_back(a[i]-'0'); vector<int> c=div(n,b,r); for(int i=c.size()-1;i>=0;i--) cout<<c[i]; cout<<endl<<r; return 0; }
|