问题描述
本题要求计算 A/B,其中 A 是不超过 1000 位的正整数,B 是 1 位正整数。你需要输出商数 Q 和余数 R,使得 A=B×Q+R 成立。
输入格式
输入在一行中依次给出 A 和 B,中间以 1 空格分隔。
输出格式
在一行中依次输出 Q 和 R,中间以 1 空格分隔。
样例输入
123456789050987654321 7
样例输出
17636684150141093474 3
分析
容易漏考虑 A<B 的情况
C++代码
#include<bits/stdc++.h>
using namespace std;
int main(){
vector<char>c,q;
char ch;
while(~scanf("%c",&ch)){
if(ch==' ') break;
c.push_back(ch);
}
int b;
cin>>b;
int r;
//易漏考虑的情况:
if(c.size()==1&&c[0]-'0'<b){
cout<<0<<" "<<c[0]-'0';
return 0;
}
while(!c.empty()){
int a=c[0]-'0';
c.erase(c.begin());
if(c.empty()){
r=a;
break;
}
a=a*10+(c[0]-'0');
r=a%b;
cout<<a/b;
c[0]=r+'0';
}
cout<<" ";
cout<<r;
return 0;
}
备注
一开始写的是这个样子,但是总是运行超时
vector<char>c,q;
while(true){
char ch;
cin>>ch;
if(ch==' ') break;
c.push_back(ch);
}
int b;
cin>>b;
改成这个就好了
vector<char>c,q;
char ch;
while(~scanf("%c",&ch)){
if(ch==' ') break;
c.push_back(ch);
}
int b;
cin>>b;