PAT 乙级 1017 A除以B v1.0
1. 题目描述及在线测试位置
1.1 计算 A/B,其中A是不超过1000位的正整数,B是1位正整数,输出商数和余数
1.2 在线测试位置:PAT 1017 A除以B
2. 具体实现
2.1 基本思路
被除数A是不超过1000位的正整数,因此只能通过string类进行存储。模拟除法的整个过程,每次从字符串中顺序取出一个字符 并 转换为数字,然后和除数相除,打印商 并 记录余数;余数*10 + 字符串的下一个数字,继续和除数相除,重复上述步骤;当取出字符串中的最后一个数字时,同时打印商和余数
2.2 AC代码
#include <iostream>
using namespace std;
int main()
{
string S;
int dividend, divisor,remainder=0,i; //被除数 除数 余数
cin >> S >> divisor;
for (i = 0; i < S.length()-1; i++)
{
dividend = (S[i] - '0')+ remainder*10;
if (dividend >= divisor)
{
cout << dividend / divisor;
remainder = dividend % divisor;
}
else if(dividend < divisor)
{
if(i!=0) //数字的首位小于除数时,不打印0
cout << "0";
remainder = dividend;
}
}
dividend = ( S[i]-'0') + remainder * 10;
cout << dividend / divisor << " ";
cout << dividend % divisor;
return 0;
}