当前位置: 代码迷 >> C语言 >> 关于任意进制转化10进制问题
  详细解决方案

关于任意进制转化10进制问题

热度:263   发布时间:2006-03-27 14:03:00.0
关于任意进制转化10进制问题

某论坛朋友发的程序我看了,问题较多,而且变量设置过多,有些东西处理烦琐,我稍微简化了点
而且改过这程序之后还有个问题,就是例如基数是10,你输入的数据中有比9大的,例如a,它也可以运行
这显然是错误,所以在执行前要加些判断(自己加吧),现在的程序只能靠测试者自己保证输入正确了

#include<math.h>
#include<string.h>
long fh(char *p,int base) /*你的程序设计决定只能完成16进制以内的转化*/
{
char *q;
int i,j=0;
long a[20],sum=0; /*能处理比较大点的数字,非常大也处理不了*/

for(q=strlen(p)+p-1;q>=p;q--,j++)
{
if(*q>=48 && *q<=57)
a[j]= (*q-48) * ( pow(base,j) );
else if(*q>=65 && *q<=70)
a[j]= (*q-55) * ( pow(base,j) );
else if(*q>=97 && *q<=102) /*别忘了小写字母的情况*/
a[j]= (*q-87) * ( pow(base,j) );
else
{
printf("input error\n");
break;
}
}
for(i=0;i<j;i++)
sum+=a[i];
return sum;
}
void main()
{
char a[20];
int base;
long c;

printf("please input base:\n");
scanf("%d",&base);
printf("please input number\n");
scanf("%s",a);
c=fh(a,base);
printf("%d---%s====>%ld\n",base,a,c);
getch();
}



另外由于个人原因:以后不回答女人的问题,抱歉
搜索更多相关的解决方案: 进制  STRONG  变量  char  include  

----------------解决方案--------------------------------------------------------
以下是引用success在2006-3-27 14:32:00的发言:

写的什么啊,有那么麻烦吗?
#include<stdio.h>
#include<math.h>
#include<string.h>

int getnum(char e);

//将任意进制转换成10进制程序,此题输入16进制输出10进制
int main(void)
{
char radix[20];
int i,len,decimal=0;

printf("Please input number:");
scanf("%s",radix);
len=strlen(radix);
len--;
for(i=0;radix[i]!=NULL;i++)
{
decimal+=((getnum(radix[i])) * (int)pow(16,len)); //可以修改16
len--;
}
printf("dicimal=%d\n",decimal);

return 0;
}

int getnum(char e)
{
char string[17]="0123456789abcdef";
int i;

for(i=0;i<=15;i++)
if(string[i]==e)
break;

return i;
}

好好看看


这程序漏洞更多,还在这。。。。我也不想说了 随便


----------------解决方案--------------------------------------------------------
世界上还有这种人
----------------解决方案--------------------------------------------------------
  相关解决方案