标签:输出 题目 运算 Level Practice 10 余数 PAT 1000
文章目录
一【题目难度】
- 乙级
二【题目编号】
- 1017 A除以B (20 分)
三【题目描述】
- 本题要求计算 A / B A/B A/B,其中 A A A 是不超过 1000 1000 1000 位的正整数, B B B 是 1 1 1 位正整数。你需要输出商数 Q Q Q 和余数 R R R,使得 A = B × Q + R A=B×Q+R A=B×Q+R 成立。
四【题目示例】
-
输入格式:
输入在一行中依次给出 A A A 和 B B B,中间以 1 1 1 空格分隔。 -
输出格式:
在一行中依次输出 Q Q Q 和 R R R,中间以 1 1 1 空格分隔。 -
输入样例:
123456789050987654321 7 -
输出样例:
17636684150141093474 3
五【解题思路】
- 很明显这道题不能用普通的方法计算,因为没有哪个数据类型可以支持1000位的数字,所以这应该想让我们手动模拟除法和取模的运算,我们可以想象我们手动计算的时候,从最高位开始除以除数,如果够除就上商(输出)且将余数(模)扩大10倍继续运算,不够除就将余数(模)扩大10倍继续运算,那么我们程序也一样在模拟这个过程。其中需要注意的是,我们首先要把第一位先判断一下,否则如果第一位不够除会商0(输出0),这个格式不符合答案要求,所以先判断一下,只有A的长度为1(一次运算即可),或者用第一位算的商不为0(说明够除)并且长度大于1(有余数(模)),这个时候才输出,不够除的情况不输出,这样就避免了输出0而导致格式不正确,然后更新余数(模)按序运算即可
六【最终得分】
- 20分
七【代码实现】
#include<stdio.h>
#include<string.h>
int main()
{
char A[1001];
int B,Q,R = 0;
scanf("%s %d",A,&B);
int len = strlen(A);
Q = (A[0] - '0') / B;
if(len == 1 || (Q != 0 && len > 1))
{
printf("%d",Q);
}
R = (A[0] - '0') % B;
for(int i = 1;i<len;i++)
{
Q = ((R*10) + (A[i] - '0')) / B;
printf("%d",Q);
R = ((R*10) + (A[i] - '0')) % B;
}
printf(" %d",R);
return 0;
}
八【提交结果】
标签:输出,题目,运算,Level,Practice,10,余数,PAT,1000 来源: https://blog.csdn.net/IronmanJay/article/details/122737691
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。