求c语言程序:同时输入几个不同进制的数 如何判断它们的进制 并以对应的10进制数输出

如输入:0x2f 031 32
如何编程判断其分别为16进制数 8进制数 10进制数
最后以对应的10进制输出
(程序越简洁越好 有注释)

#include<stdio.h>
#include<math.h>
void main()
{
char a[20]={0};int b=0,i,j;
printf("please enter a numnber:");
scanf("%s",a);
if(a[0]=='0' && a[1]=='x')
{
for(i=19;a[i]=='\0';i--);//求有效长度
j=0;
for(i;i>1;i--)
{
if(a[i]>='a')
b+=pow(16,j)*(int(a[i]-97+10));
else
b+=pow(16,j)*(int(a[i]-48));
j++;
}
printf("%d",b);
}
else if(a[0]=='0' && a[1]!='x' && a[1]!='\0')
{
for(i=19;a[i]=='\0';i--);//求有效长度
j=0;
for(i;i>0;i--)
{
b+=pow(8,j)*(int(a[i]-48));
j++;
}
printf("%d",b);
}
else
printf("%s",a);
}
//我刚写的,完全满足要求。这程序还是比较简单的,主要是用c,如果是用c++会更简单。 你平常应多练练
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-05-09
除非事先约定好,否则无法做出准确判断。

例如,输入一个32,你如何判断它是几进制的(一二三进制除外)?

假设有约定:以0x开头的是16进制,以0开头的是8进制,不以0或者0开头的,并且只包含数字的是10进制:

//---------------------------------------------------------------------------

#include <stdio.h>

int main(int argc, char* argv[])
{
char n[3][80];
long int n1;
int i;
scanf("%*[^0-9xa-bA-B]%[0-9xa-bA-B]",n[0]);
scanf("%*[^0-9xa-bA-B]%[0-9xa-bA-B]",n[1]);
scanf("%*[^0-9xa-bA-B]%[0-9xa-bA-B]",n[2]);

for (i = 0; i<3; i++) {
if (n[i][0]!='0') {
printf("%s:DEC\n",n[i]);
sscanf(n[i],"%ld",&n1);
printf("%s=%ld\n",n[i],n1);
}
else if (n[i][1]=='x'||n[i][1]=='X') {
printf("%s:HEX\n",n[i]);
sscanf(n[i],"%x",&n1);
printf("%s=%ld\n",n[i],n1);
}
else {
for (n1=0; n[i][n1]; n1++)
if (n[i][n1]>='8') break;

if (n[i][n1]) printf("%s is not DEC , HEX or OCT\n",n[i]);
else{
printf("%s:OCT\n",n[i]);
sscanf(n[i],"%o",&n1) ;
printf("%s=%ld\n",n[i],n1);
}
}

putchar('\n');
}
return 0;
}
//---------------------------------------------------------------------------

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网