C语言 n进制转换为十进制

来源:百度知道 编辑:UC知道 时间:2024/09/27 21:25:25
1.假定所有输入都是合法的,即不做输入是否有效的判断。
2.只考虑n>=2且n<=16、输入数>=0时的情形。
3.整数n为进制数、字符数组str为输入串 ch为当前分析的字符、x为该字符对应的值 s为计算结果
最后字符变整数
一楼的程序跑出来好像有问题
enter n:16
91
145
enter n:16
a1
641
为什么呢?
后来
我改了一下
#include"stdio.h"
#include"stdlib.h"
#include"string.h"
#include"math.h"
#define MAXSIZE 100
void main()
{
char *str,ch[1];
int len,s=0,n,x,length,i;
str=(char*)malloc(MAXSIZE*sizeof(char));
scanf("%d\n",&n);
gets(str);
length=len=strlen(str);
for(i=0;i<len;i++)
{
ch[0]=str[i];
if(ch[0]>='0'&&ch[0]<='9')
{
x=atoi(ch);
}
else
{
switch(ch[0])
{
case 'A':{x=10;break;}
case 'B':{x=11;break;}
case 'C':{x=12;break;}
case 'D':{x=13;break;}
case 'E':{x

#include"stdio.h"
#include"stdlib.h"
#include"string.h"
#include"math.h"
#define MAXSIZE 100
void main()
{
char *str,ch[1];
int len,s=0,n,x,length;
str=(char*)malloc(MAXSIZE*sizeof(char));
printf("enter n:");
scanf("%d\n",&n); //输入进制数
gets(str); //字符串
length=len=strlen(str);
for(int i=0;i<len;i++){
ch[0]=str[i];
if(ch[0]>='0'&&ch[0]<='9'){ //ch转换成数字x
x=atoi(ch);
}
else{
switch(ch[0]){
case 'a':{x=10;break;}
case 'b':{x=11;break;}
case 'c':{x=12;break;}
case 'd':{x=13;break;}
case 'e':{x=14;break;}
case 'f':{x=15;break;}
}
}
if(x>=n){printf("输入错误\n");exit(0);}
length--;
s=s+x*pow(n,lengt