原题如下:
字符串处理
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;
}