pat乙级1017(代码片段)

moujun1001 moujun1001     2023-01-20     760

关键词:

题目

    题目地址:PAT 乙级 1017

 

题解

    粗看是一道大数除法题,实际上只不过是通过字符数组模拟除法过程,理解之后还是比较简单的;

    具体分析一下本题;

    因为题设中的除数(n)是一位整数,因此大幅简化了整个运算过程;在整个运算中最为重要的就是中间变量(sum),判断中间变量sum是否足够大能被除数n整除,这也是本题的关键所在;

    通过是否判断sum是否能被整除,可以分为以下两种情况:

          1. sum == 0 && num[i] < n (当前运算位num[i]小于除数)

          2. 其余情况(sum == 0 && num[i] >= n  sum != 0 && num[i] < n  sum != 0 && num[i] >= n

    第一种情况,sum当前值不够除被除数,因此要作为一种情况单独处理;

    第二种情况,sum的值无论怎样都够除除数n,因此可以全部作为一类情况处理;(如果sum不为0,说明是上一次运算没有除尽的部分,又因为是上一位的剩余,所以要乘以10,那么无论怎样都够除)

    之后我们再来分析一下两种不同情况下的处理方式:

          1. 因为中间变量不够除,也就是说,当前操作位在不是首位的情况下会商0;接下来需要改变中间变量sum的值,因此操作位后移一位加到sum;(特别注意,因为要后移一位,所以需要判断边界防止越界操作)

          2. 无论上一位是否有剩余,都把上一位的值乘以10,加上当前操作位的值;

 

代码

 1 #include <iostream>
 2 #include <string>
 3 using namespace std;
 4 
 5 int main() 
 6     string num;
 7     int n = 0, sum = 0;
 8     cin >> num >> n;
 9     for (int i = 0; i < num.size(); i++) 
10         if (sum == 0 && int(num[i]) - 48 < n && i != num.size() - 1) 
11             if (i != 0)
12                 cout << 0;
13             sum += (int(num[i]) - 48) * 10;
14             i++;
15             sum += int(num[i]) - 48;
16         
17         else 
18             sum *= 10;
19             sum += int(num[i]) - 48;
20         
21         cout << sum / n;
22         sum %= n;
23     
24     cout <<   << sum << endl;
25 
26     return 0;
27 

 

pat乙级1017.a除以b(20)

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

pat乙级1038(代码片段)

题目链接https://pintia.cn/problem-sets/994805260223102976/problems/994805284092887040题解一这份代码最后一个点会超时//PATBasicLevel1038//https://pintia.cn/problem-sets/994805260223102976/problems/994805284092887040#inclu 查看详情

pat——乙级1016(代码片段)

乙级PAT的1016乙级的题相对比较简单,我也是主要联系写代码的格式,而不是联系算法。1016 部分A+B (15point(s))正整数 A 的“D?A??(为1位整数)部分”定义为由 A 中所有 D?A?? 组成的新整数 P?A??。... 查看详情

pat乙级1003(代码片段)

题目  题目地址:PAT乙级1003 题解  规律观察题,本题的关键在于把题读懂,同时还有几个比较容易疏忽的地方需要注意;总之这道题要考虑的东西更多,细节上也要特别注意;  规律:“如果 aPbTc&nb... 查看详情

pat乙级1040有几个pat(25分)(代码片段)

题目地址#include<cstdio>#include<cstring>constintMAXN=100010;constintMOD=1000000007;charstr[MAXN];//字符串intleftNump[MAXN]=0;//每一位左边含p的个数intmain() scanf("%s",str); intlen& 查看详情

pat乙级1045(代码片段)

题目   题目地址:PAT乙级1045 题解   本题的解法比较巧妙,刚开始的试着用暴力求解,果不其然时间超限……   变换思路,既然对于每个元素来说满足的条件是前小后大,那么对数组排序,... 查看详情

pat乙级1085pat单位排行(25分)(代码片段)

题目地址#include<cstdio>#include<iostream>#include<cmath>#include<map>#include<algorithm>#include<string>#include<vector>usingnamespacestd;structnode intA; intB; 查看详情

pat乙级1033(代码片段)

题目题目地址:https://pintia.cn/problem-sets/994805260223102976/problems/994805288530460672 题解   本题一直有一分的样例点过不了,原因在于用了cin接收输入的字符……   问题在于:如果用cin输入,无法接收无坏键的... 查看详情

pat乙级1014(代码片段)

  本题主要还是考验细致程度,需要把各种情况考虑到、题审清楚1#include<iostream>2#include<string>3usingnamespacestd;45intmain()6stringstr[4];7for(inti=0;i<4;i++)8getline(cin,str[i]);9intstr_1=0,str_2=0;10str_1=str[0 查看详情

pat乙级1019(代码片段)

  本题没有考虑到小于1000的情况,当小于1000的时需要给vector的向量中推入0,直到向量中有四位数字,之后再进行排序并进行相关计算 1#include<iostream>2#include<algorithm>3#include<vector>4#include<cmath>5usingnamespacestd... 查看详情

pat乙级1023(代码片段)

1#include<iostream>2usingnamespacestd;34intmain()5intnum[10]=0;6for(inti=0;i<10;i++)7cin>>num[i];8for(inti=1;i<10;i++)9if(num[i]!=0)10cout<<i;11num[i]--;12break;131415fo 查看详情

pat乙级1013(代码片段)

  还是审题没把范围看清楚,没一次AC  题中m和n都表示第几个素数,范围是10000,所以查询的数组中需要的素数量至少10000,所以需要计算大概2~120000的整数才能查到10000个素数#include<iostream>#include<cmath>#include<vector... 查看详情

pat乙级1016(代码片段)

1#include<iostream>2#include<cmath>3usingnamespacestd;45intmain()6inta=0,da=0;7intb=0,db=0;8cin>>a>>da>>b>>db;9intcnta=0,cntb=0;10intchu=a,yu=0;11while(chu>=10) 查看详情

pat乙级1095解码pat准考证(25分)(代码片段)

题目地址#include<cstdio>#include<iostream>#include<algorithm>#include<string>#include<vector>#include<map>#include<unordered_map>usingnamespacestd;intn,m;constint 查看详情

pat乙级1012(代码片段)

  最后一个测试点怎么也过不了,问题在于A2的判断,不能单纯地以0作为判断条件;假设满足A2条件的只有两个数6和6,计算结果仍然是0,但是输出A2的值是0不是‘N‘,因此需要给A2加一个计数变量作为判断条件#include<iostrea... 查看详情

pat乙级(basiclevel)真题训练(代码片段)

写在前面:PAT冬季赛马上就要开始了!??这一次先报一个乙级冲鸭!我感Jio乙级里面还是有蛮多水题的,也有些题虽然看上去是水题,但是真正用代码实现起来的话会卡你那么一下,比如第5题数素数真的神打脸。天上不会掉馅饼... 查看详情

pat乙级1048数字加密(20分)(代码片段)

题目地址#include<cstdio>#include<iostream>#include<string>#include<algorithm>usingnamespacestd;strings[15]="0","1","2","3","4","5&# 查看详情

pat乙级1051(代码片段)

当结果中a或者b小于0,大于0.005时,保留两位小数会输出-0.00,但应输出0.00。1#include<iostream>2#include<math.h>3usingnamespacestd;45intmain()67doubler1,p1,r2,p2;8cin>>r1>>p1>>r2>>p2;9doublea1=r 查看详情