下面是改过后的算法……原算法在后面……
运行结果:
- #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");
- }
原算法:
运行结果:
- #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()
- {
- char str[N];
- int i,j,k,l,a[2*N],b[2*N],c[N];
- printf("\n请输入任意一个十六进制数:\n");
- scanf("%s",str);
- j=strlen(str);
- for(i=0;i<2*N;i++)
- a[i]=b[i]=0;
- for(i=0;i<N;i++)
- c[i]=0;
- b[0]=1;
- for(i=0;i<j;i++)
- {
- if(str[i]-48<10&&str[i]-48>=0)
- c[j-i-1]=str[i]-48;
- else
- if(str[i]-65<6&&str[i]-65>=0)
- c[j-i-1]=str[i]-65+10;
- else
- if(str[i]-97<6&&str[i]>=0)
- c[j-i-1]=str[i]-97+10;
- else
- {
- printf("\n输入错误!");
- exit(1);
- }
- }
- for(i=j-1;i>=0;i--)
- {
- k=0;
- k=multiply(b,16,i,k);
- k=multiply(b,c[i],1,k);
- if(i==j-1)l=k;
- k=plus(a,b,k+5);
- for(j=0;j<=k;j++)
- b[j]=0;
- b[0]=1;
- }
- printf("\n结果:\n");
- for(i=l;i>=0;i--)
- printf("%d",a[i]);
- printf("\n");
- }