>radix;cout<<"输入数值("<

关于数值进制转换表示的

来源:互联网  时间:2016/7/6 5:44:13

关于网友提出的“ 关于数值进制转换表示的”问题疑问,本网通过在网上对“ 关于数值进制转换表示的”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:

问题: 关于数值进制转换表示的
描述:

看到上的一个小程序,不明白,希望高手解决下,写写更详细的注解(有更高的解法最好)哈哈!
#include
void main()
{
char ch;
float result;
int radix,scale;
cout<<"输入进制的数值";
cin>>radix;
cout<<"输入数值("<<>
do //过滤去第一个数字前面的非数字字符
{
cin.get(ch);//获取字符
}
while (ch<='0'||ch>'9');
while(ch>='0'&&ch<='9')//整数转换
{
result=radix*result+ch-'0';
cin.get(ch);
}
if (ch=='.')//小数部分转换
{
scale=0;
cin.get(ch);
while(ch>='0'&&ch<='9')//优先转换为整数
{
result=radix*result+ch-'0';
cin.get(ch);
scale++;
}
while(scale>0)//再还原成小数
{
result=result/radix;
scale--;
}
}
cout<<"结果转换为十进制"<<><>
}
哎呀,还是看不明白


解决方案1:

参看:http://www.bast.net.cn/dntd/zxfd/82946.shtml
还可以看看这个,
实现的是任意进制的转换,
算法原理就是上面说的:
[ref]
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status;
typedef int SElemType;
typedef struct
{
    SElemType *base;
    SElemType *top;
    int stacksize;
}SqStack;
SqStack S;
int  iN,iM,e;
char c[]="0123456789ABCDEF";
Status InitStack(SqStack *S)
{
    S->base=(SElemType *)malloc(STACK_INIT_SIZE * sizeof(SElemType));
    if(!S->base) exit(OVERFLOW);
    S->top=S->base;
    S->stacksize=STACK_INIT_SIZE;
    return OK;
}
Status Push(SqStack *S,SElemType e)
{
    if(S->top-S->base>=S->stacksize)
    {
        S->base=(SElemType*)realloc(S->base,(S->stacksize+STACKINCREMENT)*sizeof(SElemType));
        if(!S->base) exit(OVERFLOW);
        S->top=S->base+S->stacksize;
        S->stacksize+=STACKINCREMENT;
    }
    *S->top++=e;
    return OK;
}
Status StackEmpty(SqStack *S)
{
    if(S->base==S->top) return OK;
    return ERROR;
}
Status Pop(SqStack *S,SElemType *e)
{
    if(S->top==S->base) return ERROR;
    *e=*--S->top;
    return OK;
}
main()
{
    InitStack(&S);
    printf("InPut the number: ");
    scanf("%d",&iN);
    printf("Input jin zhi shu:");
    scanf("%d",&iM);
    while(iN)
    {
        Push(&S,iN%iM);
        iN=iN/iM;
    }
    while(!StackEmpty(&S))
    {
        Pop(&S,&e);
        printf("%c",c[e]);
    }
    getchar();
}

解决方案2:

明白了这个原理,
程序应该也是比较简单的了,
不需要说明了吧?

解决方案3:

其中 x 表示 基数,
a b c d表示各个位,它们分别在 第四位, 第三位 ...
那么就是各个数据位 乘以 基数的 (所在位-1)次方, 累加求和就是 10进制的结果了

解决方案4:

数值的转化算法原理楼主能明白么?
x 进制的数据 abcd,
转化为10进制就是:  a*x^3+b*x^2+c*x^1+d*x^0

上一篇将输入的一个数组中的值按逆序重新存放
下一篇从文件读区double类型数据
明星图片
相关文章
《 关于数值进制转换表示的》由码蚁之家搜集整理于网络,
联系邮箱:mxgf168#qq.com(#改为@)