zoukankan      html  css  js  c++  java
  • 11-基于dev的bug(还没想通)

                      十六进制转八进制

    http://lx.lanqiao.cn/problem.page?gpid=T51

    问题描述
      给定n个十六进制正整数,输出它们对应的八进制数。
                        

    输入格式
      输入的第一行为一个正整数n (1<=n<=10)。
      接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。

    输出格式
      输出n行,每行为输入对应的八进制正整数。

      【注意
      输入的十六进制数不会有前导0,比如012A。
      输出的八进制数也不能有前导0。

    样例输入
      2
      39
      123ABC

    样例输出
      71
      4435274

    思路:由十六进制转八进制利用二进制位相互转化,十六进制是4个二进制位,八进制是3个二进制位。将是十六位的数每位化为4位的二进制,在3位一结合转为八进制即可。

    //如果注释掉第27行会报错??????

    #include <iostream> #include <algorithm> #include <cstdio> #include <cstring> using namespace std; string str; string two[17] = {"0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111", "1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111"}; int main(){ int n; cin >> n; while(n--){ cin >> str; string ss; string ans; for(int i = 0; i < str.length(); i++){ if(str[i] >= '0' && str[i] <= '9'){ ss += two[str[i] - '0']; } else{ ss += two[str[i] - 'A' + 10]; } } // cout << ss << endl; //dev如果注释掉这一行,就崩了,莫名其妙,但注释掉,直接交就可以ac int sum = 0; for(int i = ss.length() - 1; i >= 0; i--){ if(i == 1){ // if(ss[i] == '0' && ss[i - 1] == '0'){ //避免产生前置0 // break; // } sum = (ss[i] - '0') * 1 + (ss[i - 1] - '0') * 2; ans += (sum + '0'); break; } else if(i == 0){ // if(ss[i] == '0'){ //避免产生前置0 // break; // } sum = (ss[i] - '0') * 1; ans += (sum + '0'); break; } else{ sum = (ss[i] - '0') * 1 + (ss[i - 1] - '0') * 2 + (ss[i - 2] - '0') * 4; ans += (sum + '0'); i -= 2; } } int flag = 0; for(int i = ans.length() - 1; i >= 0; i--){ char ch = ans[i]; if(ch != '0' || flag == 1){ //如果前面有前置0的情况,则要去0 cout << ans[i]; flag = 1; } } cout << endl ; } return 0; }

      

  • 相关阅读:
    .NET设计模式(19):观察者模式(Observer Pattern)
    漂亮的信息提示
    工厂方法模式(Factory Method)
    .NET设计模式(16):模版方法(Template Method)
    通过序列化实现深拷贝
    C#委托的妙文,让你知道如何发挥委托的作用
    .NET设计模式(12):外观模式(Façade Pattern)
    动态方法DynamicMethod简例
    ado.net中的自动获取存储过程参数
    设计模式之——简单工厂模式
  • 原文地址:https://www.cnblogs.com/zhumengdexiaobai/p/8379243.html
Copyright © 2011-2022 走看看