1 条题解
-
0
思路
两个不足300位正整数求商余;商可为0,长除逐位试商,余数须小于除数。
参考程序(C++11)
#include <bits/stdc++.h> using namespace std; bool lessnum(string a,string b){return a.size()!=b.size()?a.size()<b.size():a<b;}string norm(string s){int i=0;while(i+1<(int)s.size()&&s[i]=='0')i++;return s.substr(i);}string sub(string a,string b){int borrow=0;for(int i=(int)a.size()-1,j=(int)b.size()-1;i>=0;i--,j--){int v=a[i]-'0'-borrow-(j>=0?b[j]-'0':0);borrow=v<0;if(borrow)v+=10;a[i]='0'+v;}return norm(a);}int main(){string a,b,q,rem="0";cin>>a>>b;a=norm(a);b=norm(b);for(char c:a){rem=norm(rem+c);int v=0;while(!lessnum(rem,b)){rem=sub(rem,b);v++;}q+=char('0'+v);}cout<<norm(q)<<'\n'<<rem<<'\n';}
- 1