C语言程序,任何进制的数转换成十进制数,错在哪?超过千就不对了_百度...
发布网友
发布时间:2024-10-22 08:10
我来回答
共4个回答
热心网友
时间:2024-11-17 08:16
#include <stdio.h>
#include <math.h>
#include <string.h>
int main()
{
unsigned int k=0;
char a[34], b[33] = {0};
int j, i, len;
printf("输入转换的进制数:");
scanf("%d",&j);
switch(j)
{
case 16:
printf("输入要转换的数:");
scanf("%x",&k);
printf("转换的结果是:%d\n",k);
return 0;
case 8:
printf("输入要转换的数:");
scanf("%o", &k);
printf("转换的结果是:%d\n",k);
return 0;
case 2:
printf("输入要转换的数:");
scanf("%s", a);
if ((len = strlen(a)) > 32)
{
printf("输入越界\n");
return 0;
}
memset(b, '0', 32);
sprintf(b, "%s%s", b+len, a);
for (i = 0; i < 32; ++i)
{
if (b[i] == '0')
{
continue;
}
else if (b[i] == '1')
{
k += ldexp(1, 31-i);
}
else
{
printf("输入有错误!\n");
return 0;
}
}
printf("%d\n", k);
return 0;
default:
printf("无此进制标识:\n");
}
return 0;
}
一共就3种进制标识,2 8 16.后两种 直接可以转换
2进制输入就是01010101010之类的 你可以测试一下!
有不明白的可以问我!
热心网友
时间:2024-11-17 08:16
你的程序看起来挺复杂的,如果你只要实现的功能就是,
1、如果输入10进制数,则直接输出;
2、如果输入16进制数,则以10进制的形式输出;
如果是这样的话,下面程序就可以实现这个功能
#include "stdio.h"
main()
{
long int j;
printf("输入转换的进制数:");
scanf("%d",&j);
switch(j)
{
case 16:printf("输入要转换的十六进制数:");scanf("%x",&j);break; //如果是16进制数的话
case 10:printf("输入要转换的十进制数:");scanf("%d",&j);break;//如果是十进制数的话
default:printf("输入要转换的十进制数:");scanf("%d",&j);break;//其他情况默认为十进制数
}
printf("转换为十进制的结果是:%d\n",j); //直接以十进制的形式输出
getch(); //暂停 查看屏幕的输出情况
}
热心网友
时间:2024-11-17 08:14
你的
for(i=0;i<32;i++)
{
f[i]=j;
j=j*j;
}
代码是有问题的,因为循环几次后会越界
比如我输入1200那么1200的平方是1440000
在平方就已经越界了long的范围是
-2147843647到+2147843647
所以肯定越界,
最好把j单独那出来定义成
unsigned long int j ;
这样他的范围是0到4294967295
如果这样也越界那真的很麻烦了需要拼串了
热心网友
时间:2024-11-17 08:13
for(i=0;i<32;i++)
{
f[i]=j;
j=j*j;
}
会越界。