代码 求大神指教
#include
int main(void)
{
char str[80];
char str_16[80];
int i=0;
while((str[i]=getchar())!='#')
{
i++;
}
str[i]='\0';
int k=0;
for(int j=0;j<i;j++)
{
if((str[j]>='0'&&str[j]<='9')||(str[j]>='a'&&str[j]<='f')||(str[j]>='A'&&str[j]<='F'))
{
str_16[k]=str[j];
k++;
}
}
str_16[k]='\0';
long number=0;
int flag=0,flag2=0;
for(int j=0;j<k;j++)
{
if(flag==0&&str[j]=='-')
{
flag2=1;
}
if(str_16[j]>='0'&&str_16[j]<='9')
{
flag=1;
number=number*16+str_16[j]-'0';
}else if(str_16[j]>='a'&&str_16[j]<='f')
{
flag=1;
number=number*16+str_16[j]-'a'+10;
}else{
flag=1;
number=number*16+str_16[j]-'A'+10;
}
}
if(flag2==1){
number=-number;
}
printf("%ld",number);
return 0;
}
http://blog.csdn.net/lgouc/article/details/7534845
感觉你的代码写的太杂了。一个很简单的问题搞得这么复杂。看了一半多实在看不下去了,你看清题意。题目说的是第一个16进制数之前的“-”,get两个点,一是第一个,二是之前。所以你可以直接扫描数组,找到第一个16进制数,再往前推,是否有“-”就行。
再就是没事写点注释,别人好看代码,虽然程序猿都不太喜欢这东西,贴一个判断函数给你。 并且若若回一句,一般写程序,我们可不存在对一半这种说法,一个数据过不了,就是0分
int judge(char a[])
{
int wei,i;
for(i=0; a[i]!='\0'; i++) ///找到第一个16进制数,下标赋给wei
if((a[i]>='0'&&a[i]<='9')||(a[i]>='A'&&a[i]<='F')||(a[i]>='a'&&a[i]<='f'))
{
wei=i;
break;
}
for(i=0; i<wei; i++) ///往前面搜索看是否有“-” 1代表有
if(a[i]=='-')
return 1;
return 0;
}
首先找到16进制数的开头和结尾,然后将16进制数提取出来就行啊
兄弟,flag和flag2应该在str[]里确定,你把str[]里的十六进制字符取到str_16[]里,但是没管'-'号,这样str_16[]里是没有'-'的,所以输出的数肯定是正数,测试0正好就是要输出负数。