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;
}