某论坛朋友发的程序我看了,问题较多,而且变量设置过多,有些东西处理烦琐,我稍微简化了点
而且改过这程序之后还有个问题,就是例如基数是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();
}
另外由于个人原因:以后不回答女人的问题,抱歉
----------------解决方案--------------------------------------------------------
写的什么啊,有那么麻烦吗?
#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;
}
好好看看
这程序漏洞更多,还在这。。。。我也不想说了 随便
----------------解决方案--------------------------------------------------------
世界上还有这种人
----------------解决方案--------------------------------------------------------