内容
输入需要进行m进制转换,然后再输入该进制下想转换的正整数n。
非法输入报错本案例只是实现除数字外有其它字符输入都报错
(我也很期待哪个大佬能分享真正完美实现任何进制转换的案例)
大佬们有兴趣可以尝试解决以下代码缺陷:
- 小数的进制转换
- 只要n某一位出现大于m的情况就报错,比如六进制你给我来个数n=78那肯定是非法啦
- 超过10的进制转换(比如十六进制,这个时候输入的数n的值出现A~F都是合法的)
- 进制大于36字母不够表示又该怎么处理呢
越思考越觉得尴尬,我这代码算个啥啊,哈哈,不过我还是硬着头皮献丑了
再次说下我这里功能实现局限之处吧
- 进制仅现于十以内
- m,n都是正整数,出现字母就报错
- 自行避免n的每一位出现大于m情况
代码
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
char m[200]= {0}; //什么进制
char n[200]= {0}; //该进制下的数
int p,q;
printf("分别输入进制数和该进制的数字:\n");
while(scanf("%s",&m)!=EOF)
{
scanf("%s",&n);
if((strspn(m,"0123456789") == strlen(m))&&(strspn(n,"0123456789") == strlen(n)))
{
p = atoi(m);
q = atoi(n);
int y=0,product=1;
while(q!=0)
{
y=y+(q%10)*product;
q=q/10;
product=product*p;
}
printf("输出结果是:%d\n",y);
printf("**********\n");
}
else
{
printf("****输入错误****\n");
}
}
return 0;
}