12.20写的小程序:输入整型,输出16进制的数;将各个位求和;并将16进制的数翻转;最后再将它转化为10进制数输出
#include <stdio.h>
#include <math.h>
void main()
{
int num;
printf("请输入一个十进制整数:");
scanf("%d",&num);
int a[2]; //这里的数组长度应当依据什么来定义
int i=0;
int yushu;
while(num>0)
{
yushu=num%16;
a[i]=yushu;
num=num/16;
i++;
}
printf("转化为十六进制的数为:");
for(;i>=0;i--)
{
printf("%x",a[i]);
}
printf("\n");
int sum;
sum=0;
for(i=0;i<2;i++)
sum=sum+a[i];
printf("十六进制的各个位之和:");
printf("%d\n",sum);
printf("十六进制翻转为:");
int b[2];
for(i=0;i<2;i++)
{
b[i]=a[i];
printf("%x",b[i]);
}
printf("\n");
int c;
c=0;
for(i=0;i<2;i++)
{
pow(16,i);
c=c+a[i]*pow(16,i);
}
printf("转化为十进制的数为:%d\n",c);
}
问题:在运行时,数组长度不一样,运行的结果可能会出错,但我现在还不明白应该依据什么来定义。
太谢谢了,虽然不是很理解,但是如果是a[10]的话,运行就会出错啊,比如是输入100,16进制电脑会输出ccccccc64,而如果是a[2]的话,就会输出064,这是为什么?