Hnu.cg程序设计训练3.3A除以B
【问题描述】
本题要求计算A/B,其中A是不超过1000位的整数(A>=0),B是1位正整数。你需要输出商数Q和余数R,使得A = B * Q + R成立。
【输入形式】
输入在1行中依次给出A和B,中间以1空格分隔。
【输出形式】
在1行中依次输出Q和R,中间以1空格分隔。
【样例输入】
123456789050987654321 7
【样例输出】
17636684150141093474 3
【思路说明】
A是不超过1000位的整数,所以在代码中定义了一个字符串,其实平常我们怎么算除法的,在代码中怎么写就行了,就是从前面依次往后除以 B,如果有余数,乘以10,后面的数加上,就这样依次往后,就可以了。需要注意一下的就是第一个数除后的结果如果为0,最后输出的时候记得删除。另外需要留意一下的就是 char 类型的字符与 int 型整数的快速转化,即+/-字符'0',比较便捷。
【代码如下】
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main()
{
string a;int b;
cin>>a>>b;
vector<char>v;
int len=a.length();
int x=0,y=0;
for(int i=0;i<len;i++)
{
x=y+(a[i]-'0');//前一个数字除后的余数*10(即 y),加上后面的数字
v.push_back(x/b+'0');//把除的结果存储在 v 中
y=(x%b)*10;//这个数字除后的余数*10
}
int size=v.size();
/*v[0] 为0 的情况有两种,一种需要输出,另一种需要删除,当商数为一位数时
,若值为0,此时不能删除要输出,若为多位数,v[0]=0时需删除 v[0] */
if(size==1)cout<<v[0]<<" "<<x%b<<endl;
else
{
if(v[0]=='0')
v.erase(v.begin());
for(int i=0;i<v.size();i++)
{
cout<<v[i];
}
cout<<" "<<x%b<<endl;
}
}