原题如下:

字符串处理
1000(ms)
65535(kb)
587 / 2121
对于一个里面含有数字字符的字符串(长度小于200),现在将连续的数字字符组成的整数转化为16进制输出。
输入
输入字符串(多组输入)
输出
输出字符串中连续数字对应的16进制数
样例输入
a123v456U17960?302tab5876
样例输出
7B 1C8 4628 12E 16F4

题目难度不大,主要是忘记了考虑0这个特殊的值。。。。。。细心细心细心!!!!!!!!!

为什么定义成long long ,纯粹怕超过。。。。。。

代码如下:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int toHex(long long num)
{
  int flag = 1;
  int tempnum[250] = { 0 };
  int i;

  for (i = 0; num > 0;i++)//处理每一位
  {
    tempnum[i] = num % 16;
    num /= 16;
  }
  for (int j = i-1; j >= 0; j--)//对存入的每一个数转换输出
  {
    if (tempnum[j] >= 0 && tempnum[j] <= 9)
    {
      printf("%d", tempnum[j]);
    }
    else if (tempnum[j] == 10)
    {
      printf("A");
    }
    else if (tempnum[j] == 11)
    {
      printf("B");
    }
    else if (tempnum[j] == 12)
    {
      printf("C");
    }
    else if (tempnum[j] == 13)
    {
      printf("D");
    }
    else if (tempnum[j] == 14)
    {
      printf("E");
    }
    else if (tempnum[j] == 15)
    {
      printf("F");
    }
  }
  printf("\n");
  return 0;
}
int main()
{
  char s[300];
  while (scanf("%s", s) != EOF)
  {
    int len = strlen(s);
    long long temp = 0;
    int count = 0;
    for (int i = 0; i <= len; i++)
    {
      if (s[i] >= '0' && s[i] <= '9')
      {
        temp = temp * 10 + s[i] - '0';
        count++;
      }
      else
      {
        if (count != 0)
        {
          if (temp != 0)
          {
            toHex(temp);
            temp = 0;
            count = 0;
          }
          else//这里是关键,重置也很重要!!!!!!!!!
          {
            printf("0\n");
            temp = 0;
            count = 0;
            continue;
          }

        }
      }
    }
  }


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