这个C语言题目错在哪里呀,高手能具体的帮税一下吗?谢谢呀

来源:百度知道 编辑:UC知道 时间:2024/06/14 20:58:49
用一个整型数组表示一个长整数,数组的每个元素存储长整数的一位数字,则实际的长整数m表示为:
m=a[k]×10k-1+a[k-1]×10k-2+….+a[2]×10+a[1]
其中a[0]保存该长整数的位数。要求:
(1) 转换为16进制数输出;
(2) 转换成8进制数输出。
main()
{ /*转换为16进制输出*/
int i,j,k,m=o,a[100],b[100],p=1;
printf("输入位数:");
scanf("%d",&a[0]);
k=a[0];
printf("依次输入长整数的每一位:");
for(i=1;i<=k;i++)
scanf("%d",&a[i]);
m=a[1];
{
for(i=2;i<=k;i++)
m+=a[i]*p;
p*=10;
}
for(i=0;m!=0;i++)
{
b[i]=m%16;
m/=16;
}
j=i;
for(i=0;i<j;i++)
{
if(b[i]==10)b[i]=65;
if(b[i]==11)b[i]=66;
if(b[i]==12)b[i]=67;
if(b[i]==13)b[i]=68;
if(b[i]==14)b[i]=69;
if(b[i]==15)b[i]=70;
}
printf("转换16进制后为:");
for(i=j-1;i>=0;i--)
{
if(b[i]>9)printf("%c",b[i]);
else printf("%d",b[i]);
}
}
#include<stdio.h>

是m=a[k]×10(k-1)+a[k-1]×10(k-2)+….+a[2]×10+a[1] 吧,把p的初值改为10.因为他是从2 位开始的,还有,举个例子来说吧,123456这个数你是要从1输到6吧,那么把for(i=1;i<=k;i++) ;改成for(i=k;i>=1;i--);
m要存放长整型,把int m改成long m,否则两个字节不够存贮太长的整数以致会出错.还有m的初值要写0别o啊,呵呵,那不一样的.
呵呵,还有,关于进制的转换不必专门去写函数.只需用%o,%d格式分别输出八进制和十六进制的就行了.我整理了一下.也算复习了一下知识.
main()
{
int i,k,a[100],p=10;
long int m=0;
printf("输入位数:");
scanf("%d",&a[0]);
k=a[0];
printf("依次输入长整数的每一位:");
for(i=k;i>=1;i--)
scanf("%d",&a[i]);
m=a[1];
for(i=2;i<=k;i++)
{m+=a[i]*p;
p*=10;}
printf("%x",m);/*十六进制输出*/
printf("%o",m);/*八进制输出*/}
对了,同样的道理,太长的数用整型格式%d输出也会出错的.