PTA 乙级 1017 A除以B (20 分) C/C++

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
 1 #include<stdio.h>
 2 #include<string.h>
 3 struct bign {
 4     int d[1010];
 5     int len;
 6     bign() {
 7         memset(d, 0, sizeof(d));
 8         len = 0;
 9     }
10 };
11 bign change(char str[]) { // 将整数转换为bign
12     bign a;
13     a.len = strlen(str);
14     for(int i = 0; i < a.len; i++) {
15         a.d[i] = str[i] - ‘0‘; // 高位放进a的低位
16     }
17     return a;
18 }
19
20 void divide(bign a, int b, int& r) { //高精度除法,r为余数
21     bign c;
22     c.len = a.len;
23     for(int i = 0; i < a.len; i++) { //从高位开始
24         r = r * 10 + a.d[i]; //和上一位遗留的余数组合
25         if( r < b ) c.d[i] = 0; //不够除,该位为0
26         else { //够除
27             c.d[i] = r / b; //商
28             r = r % b; //获得新的余数
29         }
30     }
31     int j = 0;
32     for(int i = 0; i < c.len - 1 && c.d[i] == 0; i++) {
33         j++;
34     }
35
36     // 遍历输出
37     for(int i = j; i < c.len; i++)
38         printf("%d", c.d[i]);
39     printf(" %d", r);
40 }
41
42 int main() {
43     char str[1010];
44     int b = 0, r = 0;
45     scanf("%s%d", str, &b);
46     bign a = change(str); //将a转换为bign型
47     divide(a, b, r);
48     return 0;
49 }
 

原文地址:https://www.cnblogs.com/dreamcoding/p/10339768.html

时间: 2024-10-05 23:39:54

PTA 乙级 1017 A除以B (20 分) C/C++的相关文章

PAT乙级 1017. A除以B (20)

1017. A除以B (20) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 本题要求计算A/B,其中A是不超过1000位的正整数,B是1位正整数.你需要输出商数Q和余数R,使得A = B * Q + R成立. 输入格式: 输入在1行中依次给出A和B,中间以1空格分隔. 输出格式: 在1行中依次输出Q和R,中间以1空格分隔. 输入样例: 123456789050987654321 7 输出样例: 176366

PAT 乙级 1017 A除以B (20) C++版

1017. A除以B (20) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 本题要求计算A/B,其中A是不超过1000位的正整数,B是1位正整数.你需要输出商数Q和余数R,使得A = B * Q + R成立. 输入格式: 输入在1行中依次给出A和B,中间以1空格分隔. 输出格式: 在1行中依次输出Q和R,中间以1空格分隔. 输入样例: 123456789050987654321 7 输出样例: 176366

PTA乙级 (1068 万绿丛中一点红 (20分)(map))

1068 万绿丛中一点红 (20分) https://pintia.cn/problem-sets/994805260223102976/problems/994805265579229184 题目思路: 题目给定N*M个数字,要求找出只出现一次的数字,并且这个数字的相邻的数字都和他的差值必须大于给定的阈值tol.那么我们就找出出现次数为1的数字,然后判断该数字是否满足阈值这个条件.我们用map的key表示数字,value来表示key出现的次数. 题目代码: 1 #include <iostre

PTA乙级 (1057 数零壹 (20分))

1057 数零壹 (20分) https://pintia.cn/problem-sets/994805260223102976/problems/994805270914383872 第一次:段错误  错误代码: 1 #include <cstdio> 2 #include <cstring> 3 #include <string> 4 #include <cmath> 5 #include <algorithm> 6 #include <

PTA乙级 (*1054 求平均值 (20分))

1054 求平均值 (20分) https://pintia.cn/problem-sets/994805260223102976/problems/994805272659214336 #include <cstdio> #include <cstring> #include <string> #include <iostream> #include <cmath> #include <algorithm> #include <

PTA乙级 (1048 数字加密 (20分))

1048 数字加密 (20分) https://pintia.cn/problem-sets/994805260223102976/problems/994805276438282240 第一次提交:  错误原因:a的位数大于b时,b不足的位需要补0做运算! 第二次提交: 代码: #include <iostream> #include <cstring> #include <string> #include <cmath> #include <alg

PTA乙级 (1043 输出PATest (20分))

1043 输出PATest (20分) https://pintia.cn/problem-sets/994805260223102976/problems/994805280074743808 #include <iostream> #include <cstdio> #include <algorithm> #include <cstring> #include <string> #include <cmath> using na

PTA乙级 (1042 字符统计 (20分))

1042 字符统计 (20分) https://pintia.cn/problem-sets/994805260223102976/problems/994805280817135616 #include <iostream> #include <cstdio> #include <cmath> #include <algorithm> #include <cstring> #include <string> using namesp

PTA乙级 (1029 旧键盘 (20分))

1029 旧键盘 (20分) https://pintia.cn/problem-sets/994805260223102976/problems/994805292322111488 #include <iostream> #include <cctype> using namespace std; int main() { string str1,str2,ans; cin>>str1>>str2; for(int i=0;i<str1.lengt