本题要求计算 A/B,其中 A 是不超过 1000 位的正整数,B 是 1 位正整数。你需要输出商数 Q 和余数 R,使得 A=B×Q+R 成立。
输入格式:
输入在一行中依次给出 A 和 B,中间以 1 空格分隔。
输出格式:
在一行中依次输出 Q 和 R,中间以 1 空格分隔。
输入样例:
123456789050987654321 7
输出样例:
17636684150141093474 3
思路: 用字符串接收那一长串数字,倒着压入栈里,然后算商a与余数b,输出商a,再将余数b压入栈中。
比如说输入134,5:
- 第一步,将1、3弹栈组合成数字13,计算13÷5=2……3,输出2,压栈3,
- 第二步,将3、4弹栈组合成数字34,计算34÷5=6……4,输出6,压栈4,
- 第三步,判断出栈里只有一个元素,输出栈底4,
- 所以,结果为26,4
因为判断出栈里只有一个元素时,要输出栈底,所以当栈里只有一位数时就不能用刚刚说的步骤。这时候要在计算前多加一个判断了,如果是多位数就直接用上面说的思路,如果是一位数,就直接计算输出。
#include<bits/stdc++.h>
using namespace std;
int main()
{
string str;
int num;
cin>>str>>num;
stack<int> sta;
for(int i=str.length()-1; i>=0; i--)
{
sta.push(str[i]-'0');
}
//被除数只有一位数
if(sta.size() == 1)
{
cout<<sta.top()/num<<" "<<sta.top()%num;
}
//被除数多余一位数
else
{
while(sta.size()>1)
{
int temp;
if(sta.top() >= num)
{
temp = sta.top();
sta.pop();
sta.push(temp%num);
//cout<<temp%num<<endl;
cout<<temp/num;
}
else
{
temp = 10*(sta.top());
sta.pop();
temp = temp + (sta.top());
sta.pop();
sta.push(temp%num);
//cout<<temp%num<<endl;
cout<<temp/num;
}
}
cout<<" "<<sta.top();
}
}