P 1017

转跳点:🐏

 
1017 A除以B

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

输入格式:

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

输出格式:

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

输入样例:

123456789050987654321 7 

输出样例:

17636684150141093474 3

 

  终于升级到大整数操作了,内心一阵阵激动,认真看题就知道输入样例那玩意绝对超过了264了,斗宗强者恐怖至斯。int已经无法驾驭它了,我们需要开挂了。决定就是你了,去吧,字符串!

其实所谓的大数操作就是在模拟人手算的过程,而且这道题是化简后的大数除法。没有小数处理,直接取余数,除数只有一位大大削减了题目难度。只有两个要注意的点:

  1.最高位小于除数时,需要对字符串的长度进行判断,如果长度位1则输出,否则跳过

  2.记得每次取余和除法之前要加上余数,记得乘上10

 唉,要是真的是大整数除法,就有点烧脑了,大家先自己写写,再看代码。(考虑要不要更一波大整数运算……)

代码:

C:

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #define MAXSIZE 1010
 4 
 5 int main(void)
 6 {
 7     int Number, Quotient, Remainder;
 8     char NumStr[MAXSIZE];
 9 
10     scanf("%s%d", NumStr, &Number);
11 
12     Quotient = (NumStr[0] - '0') / Number;                          
13     if ((Quotient != 0 && NumStr[1] != '\0') || '\0' == NumStr[1])//特判第一位小于除数输出0 和 只有一位数的情况
14     {
15         printf("%d", Quotient);
16     }
17     Remainder = (NumStr[0] - '0') % Number;
18 
19     //模拟带除法
20     for (int i = 1; '\0' != NumStr[i]; i++)
21     {
22         Quotient = (Remainder * 10 + NumStr[i] - '0') / Number; //取商,每一次需要加上上一位的余数
23         printf("%d", Quotient);                                 //直接输出,懒得存储了
24         Remainder = (Remainder * 10 + NumStr[i] - '0') % Number;//取余,也需要加上上一位的余数
25     }
26     printf(" %d\n", Remainder);
27     return 0;
28 }

  

Python:

1 listt = list(input().split())
2 print(int(listt[0]) // int(listt[1]), end = ' ')
3 print(int(listt[0]) % int(listt[1]))
想哭(我想弃坑)

 

  PAT不易,诸君共勉!

posted @ 2020-01-06 12:53  秦_殇  阅读(176)  评论(0编辑  收藏  举报