PAT (Basic Level) 1017 A除以B (20 point(s))

#include <bits/stdc++.h>
using namespace std;
int main() {
	string A;
	int B, Q, R;
	cin >> A >> B;
	// 第一位没有上一位直接 / 并得到余数为当前位剩余 
	// 当只有一位A时也直接输出 
	if((A[0] - '0') > B || A.size() == 1){
		// 得到当前位结果并输出 
		Q = (A[0] - '0') / B;
		A[0] = (A[0] - '0') % B + '0';
		cout << Q;
	}
	
	// 循环 获取上一位i-1作为十位 当前位i为个位
	for(int i = 1; i < A.size(); i++){
		Q = (((A[i-1] - '0') * 10) + A[i] - '0') / B;
		A[i] = (((A[i-1] - '0') * 10) + A[i] - '0') % B + '0';
		cout << Q;
	}
	cout << " " << A[A.size()-1];
}
#include <bits/stdc++.h>
using namespace std;
int main() {
	string A;
	int B, Q, R;
	cin >> A >> B;
	// 第一位没有上一位直接 / 并得到余数为当前位剩余
	Q = (A[0] - '0') / B;
	R = (A[0] - '0') % B;
	// 被除数小于除数 && 只有一位A时 直接输出
	if((A[0] - '0') > B || A.size() == 1) {
		cout << Q;
	}
	// 循环 获取上一位i-1作为十位 当前位i为个位
	for(int i = 1; i < A.size(); i++) {
        // 上一位余数进位*10
		Q = (R * 10 + A[i] - '0') / B;
		R = (R * 10 + A[i] - '0') % B;
		cout << Q;
	}
	cout << " " << R;
}

下面的版本比上面的要化简一些,体现在用 R 替代了 上一位数 ((A[i-1] - '0') * 10) 的计算。而因为后面的循环要用到R,所以一开始也需要算一遍 R,在判断前面,不然进入循环的时候没有 R 的数值。

        Q = (A[0] - '0') / B;
        A[0] = (A[0] - '0') % B + '0'; 

而上面的版本因为直接从字符串中获取,所以就可以把这两个计算,放在一位A和除数小于被除数的判断里面。因为后面的循环也直接从原字符串里面获取数据的。

参考代码        参考理解 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值