当前位置: 代码迷 >> 综合 >> 【PAT】(乙级)1016. 部分A+B (15)
  详细解决方案

【PAT】(乙级)1016. 部分A+B (15)

热度:70   发布时间:2023-12-17 13:45:02.0

1016. 部分A+B (15)

  • 时间限制 100 ms
  • 内存限制 65536 kB
  • 代码长度限制 8000 B
  • 判题程序 Standard
  • 作者 CHEN, Yue

一、题目

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

现给定A、DA、B、DB,请编写程序计算PA + PB。

输入格式:

输入在一行中依次给出A、DA、B、DB,中间以空格分隔,其中0 < A, B < 1010。

输出格式:

在一行中输出PA + PB的值。

输入样例1:
3862767 6 13530293 3
输出样例1:
399

输入样例2:
3862767 1 13530293 8
输出样例2:
0

二、Tips

Tips: int转char*的函数:itoa不是标准C/C++语言函数,所以不能直接导入stdlib.h然后调用。提交后会编译失败。可以直接自己实现一下itoa函数,不想实现的,直接百度。当然,要是在输入时就把A、B当作字符串输入,就不用考虑这个问题啦。

三、代码

#include <stdio.h>
#include <math.h>
#include <string.h>
int l(int n){if(n==0){return 1;}int s =0 ;while(n!=0){n/=10;s++;}return s;
}
char* itoa(int num,char*str,int radix){
   /*索引表*/char index[]="0123456789ABCDEF";unsigned unum;/*中间变量*/int i=0,j,k;/*确定unum的值*/if(radix==10&&num<0){
   /*十进制负数*/unum=(unsigned)-num;str[i++]='-';}elseunum=(unsigned)num;/*其他情况*//*转换*/do{str[i++]=index[unum%(unsigned)radix];unum/=radix;}while(unum);str[i]='\0';/*逆序*/if(str[0]=='-')k=1;/*十进制负数*/elsek=0;char temp;for(j=k;j<=(i-1)/2;j++){temp=str[j];str[j]=str[i-1+k-j];str[i-1+k-j]=temp;}return str;
}
int p(int a, int d) {int sum = 0;int n = 0;char c[11];itoa(a,c,10);for (int i = 0; i < strlen(c); i++) {if(c[i]-'0'==d){sum=sum*10+d;}}return sum;
}
int main(){int A,DA,B,DB;scanf("%d %d %d %d",&A,&DA,&B,&DB);printf("%d\n",p(A,DA)+p(B,DB));return 0;
}