当前位置:网站首页>PAT乙级1017: A除以B
PAT乙级1017: A除以B
2022-07-17 05:04:00 【哆啦k梦0219】
本题要求计算 A/B,其中 A 是不超过 1000 位的正整数,B 是 1 位正整数。你需要输出商数 Q 和余数 R,使得 A=B×Q+R 成立。
输入格式:
输入在一行中依次给出 A 和 B,中间以 1 空格分隔。
输出格式:
在一行中依次输出 Q 和 R,中间以 1 空格分隔。
输入样例:
123456789050987654321 7
输出样例:
17636684150141093474 3
代码长度限制
16 KB
时间限制
100 ms
内存限制
64 MB
题意分析
本题的意思很容易理解,就是计算正整数A/B的商Q余数R,但是问题在于A的位数涉及到整形的范围问题。我们知道C语言中int型的字节数一般为4,范围为[-2^31~2^31-1],很明显是不够用的,所以一开始我想到了用Python语言来解决这个问题。
法一:Python
a,b=map(int,input().split(" "))
m=divmod(a,b)
print(m[0],m[1])
其中divmod(a,b)为Python的一个内置函数,返回的是包含商和余数的一个列表list[Q,R];
map(function, iterable)也是python中的一个内置函数(可以理解为映射):第一个参数是一个函数,第二个参数是一个序列,序列里面的每个元素作为function函数的参数进行计算和判断,函数返回的结果会作为新的元素保存起来。map函数返回的结果为一个经过function后的新序列,该序列就是序列iterable在function上一个映射。
当然如果不用这些函数也完全可以解决问题:
str = input()
list = str.split(" ")
a=int(list[0])
b=int(list[1])
print(a//b,a-a//b*b)
其中应注意Python中的input()函数默认输入的是字符串,而且可以包含空格,如果要在一行中输入两个数,则应该讲其分离开,可以用list=str.split(“ ”)将他们分开组成列表,也可以用map()函数进行迭代。
法二:C++
这种方法就比较麻烦
易错和注意事项 |
1.由于 A 是不超过 1000 位的正整数,所以不能用int,long long,因为长度都不够 |
2.由于不知道数字的长度,所以用string长度可以动态分配 |
3.当只有一位时,应该直接输出第一位的商,但是如果有多位时,应该省略第一位的零, |
4.例如3/7的值为0 3;但是12/7 为1 5,而不是01 5,所以当为多位时应不输出第一位的 |
C++代码如下:
#include<iostream>
#include<string>
using namespace std;
int main()
{
string a; //由于不知道数字的长度,所以用string长度可以动态分配
int b;
int q,r=0;
cin>>a>>b;
if(a.length()==1)
//当只有一位时,应该直接输出第一位的商,但是如果有好多位时,应该省略第一位的零,
{
q=(a[0]-'0'+r*10)/b;
r=(a[0]-'0'+r*10)%b;
printf("%d",q);
}
else
{
q=(a[0]-'0'+r*10)/b;
r=(a[0]-'0'+r*10)%b;
if(q!=0)
printf("%d",q);
for(int i=1;i<a.length();i++)
{
q=(a[i]-'0'+r*10)/b;
r=(a[i]-'0'+r*10)%b;
printf("%d",q);
}
}
printf(" %d\n",r);
return 0;
}
纯C版本:
#include<stdio.h>
#include<string.h>
int main()
{
char a[1002]={0};
int b;
scanf("%s",a);
scanf("%d",&b);
int len=strlen(a),h=a[0]-'0',q=0;//初始化len为A的位数,h为A的首位,q为0,因为对于第一位来说没有进位
if(len==1)//如果A只有一位
{
printf("%d %d\n",h/b,h%b);
return 0;//main函数return 0;程序直接结束
}
if(h/b==0)//A有多位并且首位比B小
q=h;
else//A有多位并且首位比B大
{
printf("%d",h/b);
q=h%b;
}
int i=1;
while(a[i]!=0)//字符数组结束标志为ASCII码值0
{
h=a[i++]-'0';
printf("%d",(q*10+h)/b);
q=(q*10+h)%b;
}
printf(" %d\n",q); //注意%d前面有空格
return 0;
}
边栏推荐
- Message converter (JSON)
- 这么6的刷题网站你不会没听说过吧?你已经out 了?
- Harmonyos second training notes
- uniapp 表单(input、radio、picker)提交获取参数值
- 租用服务器,以及部署在pycharm专业版上的pytorch环境训练yolov5模型教程服务器环境安装库文件:
- POC——DVWA‘s XSS Reflected
- 【Es6】快速实现用户信息打印至页面中
- Harmonyos third training notes
- 事务的使用-django、 SQL工具
- Implementation idea of log adding to database
猜你喜欢
简单快速建立pytorch环境YOLOv5目标检测 模型跑起来(超简单)
【2022第十届‘泰迪杯’挑战赛】A题:害虫识别完整版(大致思路。详细过程和代码以及结果csv在压缩包中)
读论文《SNUNet-CD: A Densely Connected Siamese Network for Change Detection of VHR Images》
微信小程序获取年月日周及早上、中午、晚上
Notes de formation pour la deuxième fois des modèles
es6新增-Symbol数据类型
mysql数据库实验实训5,数据查询yggl数据库查询(详细)
HarmonyOS第三次培训笔记
First training notes of moderlarts
Cve-2022-23131 ZABBIX SAML SSO authentication bypass vulnerability
随机推荐
【C语言—零基础第十一课】旋转大转盘之指针
百度地图 实现 热力图
数据分析与数据挖掘实战案例本地房价预测(716):
MD5 password encryption
【C语言_学习_考试_复习第三课】ASCII码与C语言概述
学习C语言的第五天
Cve-2021-44228 log4j reproduction and principle
645. 错误的集合
NVIDIA GeForce Experience登录报错:验证程序加载失败,请检查您的浏览器设置,例如广告拦截程序(解决办法)
IText modify PDF Text
Notes de formation pour la deuxième fois des modèles
STL容器——map的基本操作
Pygame:外星人入侵
Convolutional neural network
The code of yolov5 model for pest identification in Title A of the 10th Teddy cup data mining challenge (has been run through, original works, continuously updated)
02_電影推薦(ContentBased)_用戶畫像
Three high concurrency methods to realize I++
Logic of image uploading
C语言练习2
IDL 6S查找表