PAT乙级真题1016.部分A+B(15)(2016-4-28)

原题:
时间限制
100 ms
内存限制
65536 kB
代码长度限制
8000 B


正整数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

思路:

这道题的思路挺清晰,
先从A,B 中取出PA,PB,
然后把PA与PB做加法;

重点就在如何计算字符串的加法;

 code:

 1 #include<stdio.h>
 2 #include<string.h>
 3 int Find (char *,char *,char);
 4 int f(int );
 5 int main()
 6 {
 7     char A[11],B[11];
 8     char Aa[11],Bb[11];
 9     char Pa,Pb;
10     int na,nb,n=0,i,j;
11     long sum=0;
12     scanf("%s %c %s %c",A,&Pa,B,&Pb);
13     na=Find (A,Aa,Pa);
14     nb=Find (B,Bb,Pb);
15     for(i=na,j=nb;i>=0&&j>=0;i--,j--)//从字符串末尾开始,相同数位相加
16     {
17         sum+=(long)(f(n)*(Pa-'0'))+(long)(f(n)*(Pb-'0'));
18         n++;
19     }
20     if(i>j)//多出的数位相加
21     {
22         while(i>=0)
23         {
24             sum+=f(n)*(long)(Pa-'0');
25             i--;
26             n++;
27         }
28     }
29     else if(j>i)
30     {
31         while(j>=0)
32         {
33             sum+=f(n)*(long)(Pb-'0');
34             j--;
35             n++;
36         }
37     }
38     printf("%ld",sum);
39     return 0;
40 }
41 int Find (char *a,char *b,char m)//找出PA,并返回自符串长度
42 {
43     int i,j;
44     int na;
45     na=strlen(a);
46     for(i=0,j=0,b[0]='\0';i<=na;i++)
47     {
48         if(a[i]==m)
49         {
50             b[j]=a[i];
51             j++;
52         }
53     }
54     b[j]='\0';
55     return j-1;
56 }
57 int f(n)//确定第n位字符的数位,n=0时,为个位
58 {
59     if(n==0)
60         return 1;
61     else
62         return 10*f(n-1);
63 }

 

posted @ 2016-04-29 00:21  傻傻学长  阅读(335)  评论(0编辑  收藏  举报