zoukankan      html  css  js  c++  java
  • 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]='';i<=na;i++)
    47     {
    48         if(a[i]==m)
    49         {
    50             b[j]=a[i];
    51             j++;
    52         }
    53     }
    54     b[j]='';
    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 }
  • 相关阅读:
    将数据加载到内存中
    反射,Java开发者必须跨越的坎
    Eclipse中Java文件图标由实心J变成空心J的问题
    Maven项目 解决cannot be read or is not a valid ZIP file问题
    MyEclipse中SVN
    常用的 正则验证等
    前台传递数组后台通过json字符串承接和处理
    img标签图片与图片背景的区别和使用场景
    数据库的特性和事务的特性
    redis在EOS7上面进行开启和停止的命令
  • 原文地址:https://www.cnblogs.com/fengyucode/p/5444887.html
Copyright © 2011-2022 走看看