#include<stdio.h>
#include<string.h>
#define N 200
int multiply(int *b,int m,int n,int k)
{
int i,j,temp,flag,*p;
for(i=flag=0;i<n;i++)
{
p=b;
flag=temp=0;
for(j=0;j<=k;j++)
{
p=b+j;
if(flag!=1)
*p*=m;
else
{
*p=*p*m+temp;
flag=0;
}
if(*p>=10)
{
temp=*p/10;
*p=*p%10;
flag=1;
if(j==k)
k++;
}
}
}
return k;
}
int plus(int *a,int *b,int k)
{
int i,flag,temp,*p,*q;
temp=flag=0;
for(i=0;i<k;i++)
{
p=a+i;
q=b+i;
if(flag!=1)
*p+=*q;
else
{
*p=*p+*q+temp;
flag=0;
}
if(*p>=10)
{
temp=*p/10;
*p=*p%10;
flag=1;
if(i==k)
k++;
}
}
return k;
}
void main()
{
int i,j,k,l,r,a[2*N],b[2*N],c[N];
j=j=k=l=r=0;
for(i=0;i<2*N;i++)
a[i]=b[i]=0;
b[0]=1;
printf("\n输入任意十六进制字数(非十六进制字符表结束):\n");
while(1)
{
scanf("%1x",&c[j++]);
if(c[j-1]>15||c[j-1]<0)
break;
}
for(i=0;i<j-1;i++)
{
k=0;
k=multiply(b,16,j-i-2,k);
k=multiply(b,c[i],1,k);
if(i==0)l=k;
k=plus(a,b,k+3);
for(r=0;r<=k;r++)
b[r]=0;
b[0]=1;
}
printf("\n结果为:\n");
for(i=l;i>=0;i--)
printf("%d",a[i]);
printf("\n");
}
任意十六进制数转换成十进制数----不管你输入多长都能转换
最新推荐文章于 2021-07-27 16:11:28 发布