注册 登录
编程论坛 C++教室

我这个八进制转十进制的程序什么地方错了,我觉得挺对,但是就是得不到正确结果

山科大梦 发布于 2012-11-05 17:51, 473 次点击
#include<iostream>
#include<cmath>
using namespace std;

void convert()
{
    int z=0,m=0,n;
    cin>>n;
    while(n)
    {
        n=n/10;
        m++;
    }
    while(m>0)
    {
        z=z+(n/pow(10,m-1))*pow(8,m-1);
        n=n-pow(10,m-1);
        --m;
    }
    cout<<z<<endl;
   
}

int main()
{
    cout<<"请输入八进制n:"<<endl;
    convert();
    return 0;
}
4 回复
#2
山科大梦2012-11-05 21:48
求助啊,坐等
#3
rjsp2012-11-06 08:46
当到while(m>0)时,n已经是零了。更主要的是 pow 返回类型是浮点数

程序代码:
unsigned convert( unsigned n )
{
    unsigned r = 0;
    for( unsigned s=1; n!=0; s*=8,n/=10 )
        r += (n%10)*s;
    return r;
}

#include <iostream>
using namespace std;

int main()
{
    cout<<"请输入八进制n:"<<endl;
    unsigned n;
    cin >> n;
    unsigned r = convert( n );
    cout << r << endl;

    return 0;
}


#4
mmmmmmmmmmmm2012-11-06 09:40
感谢 学习了

以下是引用rjsp在2012-11-6 08:46:39的发言:

当到while(m>0)时,n已经是零了。更主要的是 pow 返回类型是浮点数

unsigned convert( unsigned n )
{
    unsigned r = 0;
    for( unsigned s=1; n!=0; s*=8,n/=10 )
        r += (n%10)*s;
    return r;
}

#include <iostream>
using namespace std;

int main()
{
    cout<<"请输入八进制n:"<<endl;
    unsigned n;
    cin >> n;
    unsigned r = convert( n );
    cout << r << endl;

    return 0;
}
#5
山科大梦2012-11-06 14:41
回复 3楼 rjsp
您提的第一个问题我发现了,可是pow那个不太懂,能不能利用我原有的程序改一下,谢谢
1