| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 486 人关注过本帖
标题:如何将一个八进制、十六进制的数转换成十进制?新手
只看楼主 加入收藏
有鱼
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2014-11-26
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:5 
如何将一个八进制、十六进制的数转换成十进制?新手
Description
Write a program to convert an input string that represents an octal integer or a hexadecimal integer to a decimal integer.

Input
The input is one line that begins with "0" or "0x", indicating an octal integer or a hexadecimal integer, respectively.

For a hexadecimal integer, it may contain uppercase letters and lowercase letters, e.g., both "0x3e5a" and "0x3E5a" are equivalent to 15962. Your program should carefully handle such a case.
这是问题  Ox3e5a 和 O 是怎么回事?这样的程序要怎么编?
搜索更多相关主题的帖子: equivalent represents carefully 十六进制 contain 
2014-11-26 21:23
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:5 
    int n;
    scanf( "%i", &n );
    printf( "%d", n );

2014-11-27 08:37
有鱼
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2014-11-26
收藏
得分:0 
谢谢!但是我们没有学过您的那种方式的输出。我们的教材是C++程序设计(第三版 影印版) 是英文版的。
2014-11-27 09:37
有鱼
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2014-11-26
收藏
得分:0 
回复 2 楼 rjsp
您好!谢谢您!但是我们没有学过您的那种方法。一下是我的程序 ,用C++语言的。您可以帮我看看哪里出错了吗?我还不太会纠错 谢谢!
目的是将八进制或十六进制的数转换成十进制。
程序代码:
[code]#include<iostream>
#include<string>
#include<cctype>
#include<cmath>
using namespace std;
int main(){
    string num;
    cin>>num;
    int sum=0;
    int l=num.length();
    if(num.substr(0,2)=="Ox"){
        for(int i=2;i<l;i++){
            char ch=num[i];
            int n;
            if(isalpha(ch)){
                switch(toupper(ch)){
                case 'A':n=10;
                break;
                case 'B':n=11;
                break;
                case 'C':n=12;
                break;
                case 'D':n=13;
                break;
                case 'E':n=14;
                break;
                case 'F':n=15;
                break;                 
            }
            }
            else if(isdigit(ch)){
                n=ch-'0';
            }
        sum=sum+n*pow(16,(l-i-1));    
        }
    }
    else if((num[0]=='O')&&(isdigit(num[1]))){
        for(int j=1;j<l;j++){
            char cha=num[j];
            int nu;
            nu=cha-'0';
            sum=sum+nu*pow(8,l-j-1);
        }
    }
    cout<<sum<<endl;
    return 0;
} 
[/code]
2014-11-27 10:16
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:15 
回复 4 楼 有鱼
程序代码:
#include <iostream>
#include <string>
using namespace std;

int main()
{
    string str;
    cin >> str;
   

    int base = 10;
    const char* p = str.c_str();
    if( str.size()>1 && str[0]=='0' )
        str[1]=='x' ? (base=16,p=p+2) : (base=8,p=p+1);

    unsigned num = 0;
    for( ; *p; ++p )
        num = num*base + ( *p>'9' ? *p%0x20+9 : *p-'0' );
    cout << num << endl;

    return 0;
}

2014-11-27 10:52
有鱼
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2014-11-26
收藏
得分:0 
回复 5 楼 rjsp
谢谢!大神的世界我不懂呀!程序很牛!大赞!!!!!!!!!
2014-11-28 18:21
快速回复:如何将一个八进制、十六进制的数转换成十进制?新手
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017092 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved