本题要求计算 A/B,其中 A 是不超过 1000 位的正整数,B 是 1 位正整数。你需要输出商数 Q 和余数 R,使得 A=B×Q+R 成立。
输入格式:
输入在一行中依次给出 A 和 B,中间以 1 空格分隔。
输出格式:
在一行中依次输出 Q 和 R,中间以 1 空格分隔。
输入样例:
123456789050987654321 7
输出样例:
17636684150141093474 3这道题目属于模拟题,模拟除法的过程,这个模拟本身比较简单,但是我们需要注意几个细节1、题目给定的A是不超过1000位的正整数,B是一位整数。这个条件就决定了我们处理A的时候要按照字符串处理2、当部分余数小于除数的时候,会有商0的可能。在最后我们需要去除前导0。
#include <bits/stdc++.h>
using namespace std;
string A,Q;
int main()
{
int B,R;
R=
0;Q=
"";
cin>>A>>
B;
int len=
A.length();
int i=
0;
int tempQ=
0;
while(i<
len)
{
R*=
10;
R+=A[i]-
'0'; //得到部分余数
tempQ=R/
B; //得到当前的商
R=R%
B;
Q+=tempQ+
'0';
i++
;
}
for(
int i=
0;i<
Q.length();) //去除前导0
{
if(Q[i]!=
'0')
break;
else
Q.erase(Q.begin()+
i);
}
if(Q==
"")
Q+=
'0';
cout<<Q<<
" "<<R<<
endl;
return 0;
}
字符串的删除操作不熟悉,str.erase(i)表示删除字符串从i处开始到end的字符串。而str.erase(str.bigin()+i)表示删除单个字符
转载于:https://www.cnblogs.com/ManOK/p/10184546.html