ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

PAT1017 A除以B (20 分)

2022-02-01 10:02:35  阅读:140  来源: 互联网

标签:输出 20 数字 int 除以 得到 output 我们 PAT1017


思路:
其实就是模拟以下运算过程, 我们定义string类型的A,和一个int类型的B,然后for循环遍历A中的每一个数字(注意减去‘0’得到的才是真正的数字),拿这个数字去除以B,得到的结果不要保存,因为1000位存储不下,所以我们直接将得到的数字给输出,而不是存储后再输出。我们定义R 用来存储余数,得到余数后判断A[i+1]是否存在,如果存在,我们给移下来(这是数学上的做法),代码上的做法就是R *10 + A[i+1]。如果不存在,那就不用管了。这里有几个坑,需要说一下:
1,我们需要定义一个bool 类型的output,用来判断可不可以进行输出,在得到非零数字前,我们都是不能进行输出的,例如:120/2,得到的是60,而不是060,当得到第一个非零数字时,我们让output等于true,然后后面得都能进行输出即可。
2,第二个坑就是人家得到的结果就是0,按照第一个坑改了以后,这个就会有问题,例如:0/2, 得到的是0,还没得到非零,我们的output就是false,还不会进行输出,这就得到了错误的结果。但是造成这个结果只有一种可能,就是我们的被除数小于除数,已知除数是一位的,那就意味着被除数也是一位的,所以我们在for循环之前加上一个if判断,如果A的size等于1,那么我们就直接输出,然后return就行,不走下面的流程,如果不等于1,那就继续走下面的流程
在这里插入图片描述

需要掌握的点:
字符和整型运算
代码:

#include<iostream>
#include<string>
using namespace std;

int main() {
	string A;
	int B;
	cin >> A >> B;
	int Q = 0;
	bool output = false;
	int R = A[0] - '0';
	if (A.size() == 1) {
		cout << A[0] / B<< " " <<  A[0] % B;
		return 0;
	}
	for (int i = 0; i < A.size(); i++) {
		Q = R / B;
		if (Q != 0) {
			output = true;
		}
		if (output == true) {
			cout << Q;
		}
		R = R % B;
		if (A[i + 1]) {
			R = R * 10 + A[i + 1] - '0';
		}
	}
	cout << " " << R << endl;
}

标签:输出,20,数字,int,除以,得到,output,我们,PAT1017
来源: https://blog.csdn.net/qq1291594496/article/details/122762815

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有