1017. A除以B (20) 本题要求计算A/B,其中A是不超过1000位的正整数,B是1位正整数。你需要输出商数Q和余数R,使得A = B * Q + R成立。 输入格式: 输入在1行中依次给出A和B,中间以1空格分隔。 输出格式: 在1行中依次输出Q和R,中间以1空格分隔。 输入样例: 123456789050987654321 7 输出样例: 17636684150141093474 3
分析:模拟除法。由于数据较大,直接用内置类型来存储数据是不行的。可以模拟除法将结果计算出来。当然,也可以用java的大数BigInteger来做,但是效率较低会超时。
#include <iostream> using namespace std; int main() { string input; string ans; int r; cin>>input>>r; int tmp=0; for(size_t i=0;i<input.length();i++) { tmp=tmp*10+(int)(input[i]-'0'); int q=tmp/r; tmp=tmp%r; char c=char('0'+q); ans.append(1,c); } if(ans[0]=='0'&&ans.length()>1) { ans=ans.erase(0,1); } cout<<ans<<" "<<tmp<<endl; return 0; }