C++ PAT乙级B1016 部分A+B

C++ PAT乙级B1016 部分A+B
C++ PAT乙级B1016 部分A+B_第1张图片

题目要求

正整数 A 的“D​A​​(为 1 位整数)部分”定义为由 A 中所有 D​A​​ 组成的新整数 P​A​​。例如:给定 A=3862767,D​A​​=6,则 A 的“6 部分”P​A​​ 是 66,因为 A 中有 2 个 6。

现给定 A、D​A​​、B、D​B​​,请编写程序计算 P​A​​+P​B​​。

输入格式

输入在一行中依次给出 A、D​A​​、B、D​B​​,中间以空格分隔,其中 0

注意程序中必须有限制输入数字的范围以及出错处理

输出格式

在一行中输出 P​A​​+P​B​​ 的值。

输入样例

3862767 6 13530293 3

输出样例

399

思路分析

(1)存储输入数据还是使用数组。
在上一篇中,我讲过了如何存储键盘键入的数到数组中(不含空格和换行符),这里就不再赘述。必须要注意题目给出的A、B的输入范围,在设变量的时候,就要设为long long int 型(0

(2)计算 P​A​​、 P​B的值。
按照数学方法,判断一个数(A)中是否有某个数字(C),只需要将该数模(%)10,看余数是否等于C。并且将A的值在每次模10比较后都除以10–手动移位进行A中下一位数的比较,一直进行该步骤,直至A等于0(A中所有位都进行了与C的比较)。
看代码可能会更清晰直观

代码示例

#include
#include 

using namespace std;
int main()
{   long long a[4];   //存储键入的四个数
    long long b[2];
    b[0]=0;   //存储PA
    b[1]=0;   //存储PB
    int i=0;
    char c;
    while(i<4)
    {
        c=getchar();  //获取输入字符
        if(c=='-')     //如果键入数包含负数,则结束程序
        {
            return 0;
        }
        if(c>='0'&&c<='9')  //输入正整数
		{
			ungetc(c,stdin);
			cin>> a[i++];
		}
    }

     while(a[0]!=0)      //对A的处理
     {
         if(a[0]%10==a[1]) b[0]=b[0]*10+a[1];   //计算PA
        a[0]=a[0]/10;     //手动移位

     }
    while(a[2]!=0)      //对B的处理
     {
         if(a[2]%10==a[3]) b[1]=b[1]*10+a[3];    //计算PB
        a[2]=a[2]/10;     //手动移位

     }
     cout<

代码段若有看不懂,可参考思路分析。若是有疑问可评论、私信版主

结果截图

C++ PAT乙级B1016 部分A+B_第2张图片
C++ PAT乙级B1016 部分A+B_第3张图片若需要转载,请联系版主

你可能感兴趣的:(C++入门,PAT乙级真题)