首页 > 学院 > 开发设计 > 正文

PAT-B 1016. 部分A+B (15)

2019-11-11 01:42:42
字体:
来源:转载
供稿:网友

题目链接在此。

这个题目在做的过程中发现需要注意的点有:

scanf的输入控制符(%lld,%d),可参见这篇文章。若一个数由n个x组成,求这个数

以上也是解这道题目的关键所在。

刚开始的思路是想: 将输入的A,B读入char[]数组中,然后用循环判断每一位是否等于DA,DB,得到等于DA,DB的个数,然后得出PA,PB,最后求得结果。这种方法也不算复杂。

后来想到,既然又是整数的处理,是否能用除法和取余这两种运算呢?后来想通了,《算法笔记》上的解法也是如此,代码如下:

#include<stdio.h>int main(){ long long A,B; int DA,DB; int PA = 0,PB = 0; int JA,JB; int sa = 0, sb = 0; scanf("%lld %d %lld %d",&A,&DA,&B,&DB); //拿到A中DA的个数 while( A != 0 ){ JA = A % 10; if( JA == DA ){ sa ++; } A /= 10; } //拿到B中DB的个数 while( B != 0 ){ JB = B % 10; if(JB == DB){ sb++; } B /= 10; } //求PA if(sa){ PA = DA; for(int i = 1; i < sa; i++){ PA = PA*10 + DA; } } //求PB if(sb){ PB = DB; for(int i = 1; i < sb; i++){ PB = PB*10 + DB; } } PRintf("%d/n",PA+PB); return 0;}

其实代码可以简化成如下:

#include<stdio.h>int main(){ long long A,B; int DA,DB; int PA = 0,PB = 0; int JA,JB; int sa = 0, sb = 0; scanf("%lld %d %lld %d",&A,&DA,&B,&DB); //拿到A中DA的个数 while( A != 0 ){ JA = A % 10; if( JA == DA ){ PA = PA*10 + DA; } A /= 10; } //拿到B中DB的个数 while( B != 0 ){ JB = B % 10; if(JB == DB){ PB = PB*10 + DB; } B /= 10; } printf("%d/n",PA+PB); return 0;}

最后,还是提醒自己注意scanf的输入格式控制!!!


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表