zoukankan      html  css  js  c++  java
  • [打基础]luogu1957口算练习题——字符串基本操作

    题意:第一行给出数据组数n,之后n行每行给出三个或两个数据,若给三个数据,则第一个数据用单个字符a/b/c分别表示+/-/*运算,后两个数表示参与运算的数字,若给两个数据延续之前的运算

    要求对每行数据输出对应的计算表达式(如a 1 2输出1+2=3)和表达式的长度


    我啥都忘记…


    思维上没有难度,几个小的地方处理清楚

    • 比如对于每行两个数据还是三个数据的判定可以先读入两个数据p,q(默认当做参与运算的数字),再getchar一下,如果得到 或者 说明行尾了,如果是空格后面还有一个数据,那就应该让运算符变成第一个p,实际上的p应该是读到的q,然后q另外再读一个。这里用到 strcpy(p,q); 来用q覆盖p
    • 再然后是把字符串弄成数字,应该没问题,如果是负数判个负号(不过这题甚至都保证非负),接着从高位往低位逐位求和就行
    • 最后用一个新字符串保存要输出的表达式,用 strcat(p,q); 把q接到p的后面,计算结果直接当数字输出,最后输出长度的时候用 strlen(表达式)+答案长度 
    • 然后要说的是我第一次交的时候wa掉的地方…如果答案是0的话长度是1…特别提醒
     1 #include<cstdio>
     2 #include<cstring>
     3 const int N=105;
     4 int l,f,m,n,ans;
     5 char p[N],q[N],r[N],pri[N];
     6 inline void work(char *t,int *g)
     7 {
     8     *g=0;
     9     int len=strlen(t);
    10     for(register int i=0;i<len;i++)*g=*g*10+t[i]-'0';
    11 }
    12 inline int calc(int g)
    13 {
    14     int res=0;if(g<=0)res++,g=-g;
    15     /*
    16     attention!
    17     if g equal to,res should be 1 not 0; 
    18     */
    19     while(g){g/=10;res++;}
    20     return res;
    21 }
    22 int main()
    23 {
    24     //freopen("input.in","r",stdin);
    25     scanf("%d",&l);f=-1;
    26     while(l--)
    27     {
    28         scanf("%s%s",p,q);char c=getchar();
    29         if(c==' ')
    30         {
    31             strcpy(r,p);strcpy(p,q);
    32             scanf("%s",q);
    33             f=r[0]-'a';
    34         }
    35         work(p,&m);work(q,&n);
    36         
    37         strcat(pri,p);
    38         if(f==0)ans=m+n,strcat(pri,"+");
    39         else if(f==1)ans=m-n,strcat(pri,"-");
    40         else if(f==2)ans=m*n,strcat(pri,"*");
    41         strcat(pri,q);strcat(pri,"=");
    42         
    43         printf("%s%d
    ",pri,ans);
    44         printf("%d
    ",strlen(pri)+calc(ans));
    45         memset(pri,0,sizeof(pri));
    46     }
    47     return 0 ;
    48 }
  • 相关阅读:
    hdu 5119 Happy Matt Friends
    hdu 5128 The E-pang Palace
    hdu 5131 Song Jiang's rank list
    hdu 5135 Little Zu Chongzhi's Triangles
    hdu 5137 How Many Maos Does the Guanxi Worth
    hdu 5122 K.Bro Sorting
    Human Gene Functions
    Palindrome(最长公共子序列)
    A Simple problem
    Alignment ( 最长上升(下降)子序列 )
  • 原文地址:https://www.cnblogs.com/yoshinow2001/p/13548010.html
Copyright © 2011-2022 走看看