原题如下:

1000(ms)
65535(kb)
3556 / 12471
读入两个小于100的正整数A和B,计算A+B。需要注意的是:A和B的每一位数字由对应的英文单词给出。
输入
测试输入包含若干测试用例,每个测试用例占一行,格式为"A + B =",相邻两字符串有一个空格间隔。当A和B同时为0时输入结束,相应的结果不要输出。
输出
对每个测试用例输出1行,即A+B的值。
样例输入
one + two = three four + five six = zero seven + eight nine = zero + zero =
样例输出
3 90 96

难度倒是不大,就是有点麻烦,主要是用指针操作字符串,其还用了二级指针去改变主函数的a和b的值。

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    void findNum(char *s,int **n)
    {
      if (strstr(s, "zero"))
      {
        **n = (**n) * 10 + 0;
      }
      else if (strstr(s, "one"))
      {
        **n = (**n) * 10 + 1;
      }
      else if (strstr(s, "two"))
      {
        **n = (**n) * 10 + 2;
      }
      else if (strstr(s, "three"))
      {
        **n = (**n) * 10 + 3;
      }
      else if (strstr(s, "four"))
      {
        **n = (**n) * 10 + 4;
      }
      else if (strstr(s, "five"))
      {
        **n = (**n) * 10 + 5;
      }
      else if (strstr(s, "six"))
      {
        **n = (**n) * 10 + 6;
      }
      else if (strstr(s, "seven"))
      {
        **n = (**n) * 10 + 7;
      }
      else if (strstr(s, "eight"))
      {
        **n = (**n) * 10 + 8;
      }
      else if (strstr(s, "nine"))
      {
        **n = (**n) * 10 + 9;
      }
    }
    void splitStr(char *s,int *n,int *q)   //分离字符串
    {
      char sTmp[100];
      int i = 0;
      for (i = 0; s[i] != ' '; i++)
      {
        sTmp[i] = s[i]; 
      }
      sTmp[i] = '\ 0';  //构成c字符串
      i++;
      s += i;   //跳过无用的字符
      findNum(sTmp, &n);
      if (s[0] != '+')
      {
        int i = 0;
        for (i = 0; s[i] != '+'; i++)
        {
          sTmp[i] = s[i];
        }
        sTmp[i] = '\0';    //构成c字符串
        s += i;  //跳过无用的字符
        findNum(sTmp, &n);
        s += 2;  //跳过无用的字符
      }
      else
      {
        s += 2;
      }
      for (i = 0; s[i] != ' '; i++)
      {
        sTmp[i] = s[i];
      }
      sTmp[i] = '\0';
      i++;
      s += i;
      findNum(sTmp, &q);
      if (s[0] != '+')
      {
        int i = 0;
        for (i = 0; s[i] != '='; i++)
        {
          sTmp[i] = s[i];
        }
        sTmp[i] = '\0';
        findNum(sTmp, &q);
      }
    } 
    int main()
    {
      char s1[100];
      while (fgets(s1, 100, stdin) != NULL)    //判断输入
      {
        int a = 0;
        int b = 0;
        int len1 = strlen(s1);
        s1[len1 - 1] = '\0';
        if (strcmp("zero + zero =", s1) == 0)  //题目要求 输入00时直接结束
        {
          break;
        }
        len1--;
        splitStr(s1, &a, &b);   //这个函数用来分离字符串
        printf("%d\n", a + b);
      }


      system("pause");
      return 0;
    }
最后修改:2019 年 05 月 24 日 09 : 59 PM
如果觉得我的文章对你有用,请随意赞赏