写的不好。。。。求指点。。。
#include <stdio.h>#include <math.h>
#include <string.h>
void main()
{
void sjz(char a[80]);
char a[80];
gets(a);
sjz(a);
}
void sjz(char a[80])
{
int i,k=0,n,j,r=16,w=0;
n=strlen(a);
for(i=0;a[i]!='\0';i++)
{
if(a[i]=='x'||a[i]=='X')
{
n=n-1;
continue;
}
if(n>=3)
{
k=16;
for(j=2;j<n;j++)
k=k*r;
if(a[i]>='0'&&a[i]<='9')
{
k=k*(a[i]-'0');
}
else
if(a[i]>='a'&&a[i]<='f')
{
k=k*(10+a[i]-'a');
}
else
if(a[i]>='A'&&a[i]<='F')
{
k=k*(10+a[i]-'A');
}
n=n-1;
printf(" %d ",k);
}
else
if(n==2)
{
k=16;
if(a[i]>='0'&&a[i]<='9')
{
k=k*(a[i]-'0');
}
else
if(a[i]>='a'&&a[i]<='f')
{
k=k*(10+a[i]-'a');
}
else
if(a[i]>='A'&&a[i]<='F')
{
k=k*(10+a[i]-'A');
}
n=n-1;
printf(" %d ",k);
}
else
if(n<2)
{
k=0;
if(a[i]>='0'&&a[i]<='9')
{
k=k+(a[i]-'0');
}
else
if(a[i]>='a'&&a[i]<='f')
{
k=k+(10+a[i]-'a');
}
else
if(a[i]>='A'&&a[i]<='F')
{
k=k+(10+a[i]-'A');
}
printf(" %d ",k);
}
w=w+k;
}
printf("\n");
printf("w=%d\n",w);
}
觉得有点太长了。。。。 请给个比较短的算法,最好不要用指针。。。偶看不懂。。。
功能是输入16进制数,按10进制输出。。。。。感觉也太长了
[ 本帖最后由 hywhll888 于 2011-7-14 21:39 编辑 ]