版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_31880107/article/details/51296259
1. 题目
-
本题要求计算A/B,其中A是不超过1000位的正整数,B是1位正整数。你需要输出商数Q和余数R,使得A = B * Q + R成立。
-
输入格式:
输入在1行中依次给出A和B,中间以1空格分隔。 -
输出格式:
在1行中依次输出Q和R,中间以1空格分隔。 -
样例
输入样例:
123456789050987654321 7
输出样例:
17636684150141093474 3
2. 分析
需要注意的是最后输出商数q时,应该去掉前几位的零,但如果q就是n个0,则应该输出一个0
总结下string的搜索操作
- s.find(args) 查找s中args第一次出现的位置
- s.rfind(args) 查找s中args最后一次出现的位置
- s.find_first_of(args) 在s中查找args中任何一个字符第一次出现的位置
- s.find_last_of(args) 在s中查找args中任何一个字符最后一次出现的位置
- s.find_first_not_of(args) 在s中查找第一个不在args中的字符
- s.find_last_not_of(args) 在s中查找最后一个不在args中的字符
args必须是以下形式之一
- (c,pos) 从s中位置pos开始找字符c。pos默认为0
- (s2,pos) 从s中位置pos开始找字符串s2。pos默认为0
- (cp,pos) 从s中位置pos开始查找指针cp指向的以空字符结尾的c风格字符串,pos默认为0
- (cp,pos,n) 从s中位置pos开始查找指针cp指向的数组的前n个字符。pos和n无默认值
3. 答案代码
#include <iostream>
#include <string>
using namespace std;
int main()
{
string a,q;
int b,r=0;
cin >> a >> b;
for (auto i:a)
{
q.push_back((i - '0'+r*10) / b+'0');
r = (i - '0' + r * 10) % b;
}
auto it = q.find_first_not_of('0');
cout << ((it != string::npos) ? q.substr(it) : "0" )<< " " << r;
return 0;
}