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 }