您的位置:首页 > 其它

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

2016-08-08 12:49 155 查看

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++]='-';
}
else
unum=(unsigned)num;/*其他情况*/
/*转换*/
do{
str[i++]=index[unum%(unsigned)radix];
unum/=radix;
}while(unum);
str[i]='\0';
/*逆序*/
if(str[0]=='-')
k=1;/*十进制负数*/
else
k=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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: