【PTA刷题整理】PAT 乙级 1017 A除以B

2020.03.04 只要我写的够快。。。布置作业的速度就追不上我。。。今天这个题说实话一开始也是没有什么思路,也是折腾了好久参照了别人的做法才做出来的,其实算是一个比较简单的题目吧,但是自己还是太弱了,害


1017 A除以B (20分)

本题要求计算 A/B,其中 A 是不超过 1000 位的正整数,B 是 1 位正整数。你需要输出商数 Q 和余数 R,使得 A=B×Q+R 成立。
输入格式:

输入在一行中依次给出 A 和 B,中间以 1 空格分隔。
输出格式:

在一行中依次输出 Q 和 R,中间以 1 空格分隔。
输入样例:

123456789050987654321 7

输出样例:

17636684150141093474 3


首先这是个1000位的正整数,已经超过了long long的长度,所以应该使用字符串来进行存储A
,从字符串的第一位开始遍历,每次取一位,同时设置中间变量,如果中间变量大于B,则直接输出除的结果,否则输出0,然后将中间变量进行求模,
再进行下一次循环,需要将原有的中间变量进位,直到遍历完整个字符串为止,同时需要引入标记来记录A是否为0,如果A为0,则输出0即可


#include<iostream>                  //输入输出流头文件
#include<stdio.h>                   //标准输入输出
#include<stdlib.h>
#include<math.h>                    //数学函数
#include<string.h>                  //C语言字符数组的字符串
#include<algorithm>                 //C++标准模板库的函数
#include<map>                       //map映射容器
#include<unordered_map>             //无序的map映射容器
#include<vector>                    //变长数组容器
#include<queue>                     //队列
#include<stack>                     //栈
#include<string>                    //C++string类
#include<set>                       //set集合
using namespace std;                //标准命名空间

                                    //可以加入全局变量或者其他函数

int main(){                         //主函数
#ifdef ONLINE_JUDGE                 //如果有oj系统(在线判定),则忽略文件读入,否则使用文件作为标准输入
#else
    freopen("1.txt", "r", stdin);   //从1.txt输入数据
#endif

    string A ;
    int B ;
	cin >> A >> B;
	//cout << A << " " << B << endl;
	bool flag = false;
	int temp = 0;
	for(int i = 0 ; i < A.size() ;i++){
		temp = A[i] - '0' + temp * 10;
		if(temp >= B){
			cout << temp / B;
			flag = true; 
		}else if(flag){
			cout << "0"; 
		}
		temp %= B;
	} 
	if(!flag){
		cout << "0";
	}
	cout << " " <<temp << endl;

    return 0;                       
}

发布了22 篇原创文章 · 获赞 2 · 访问量 497

猜你喜欢

转载自blog.csdn.net/weixin_43849089/article/details/104657837