码农的世界程序书海程序员

潜修亮剑一

2018-05-31  本文已影响36人  逍遥_9353

/*基础练习 十六进制转八进制 

时间限制:1.0s  内存限制:512.0MB

提交此题  锦囊1  锦囊2

问题描述

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

输入格式

  输入的第一行为一个正整数n (1<=n<=10)。

  接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。

输出格式

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

  【注意】

  输入的十六进制数不会有前导0,比如012A。

  输出的八进制数也不能有前导0。

样例输入

  2

  39

  123ABC

样例输出

  71

  4435274

  【提示】

  先将十六进制数转换成某进制数,再由某进制数转换成八进制。

*/

…………………………………………………

#include <iostream> 

#include <string> 

using namespace std; 

 

int main() 

    int n; 

    cin>>n; 

    for(int i=0;i<n;i++) 

    { 

        string a,b;

        cin>>a; 

        b="";//初始化 

        for(int i=0;i<a.length();i++)

        { 

        //十六进制转二进制

            switch(a[i]) 

            { 

                case '0':b+="0000";break; 

                case '1':b+="0001";break; 

                case '2':b+="0010";break; 

                case '3':b+="0011";break; 

                case '4':b+="0100";break; 

                case '5':b+="0101";break; 

                case '6':b+="0110";break; 

                case '7':b+="0111";break; 

                case '8':b+="1000";break; 

                case '9':b+="1001";break; 

                case 'A':b+="1010";break; 

                case 'B':b+="1011";break; 

                case 'C':b+="1100";break; 

                case 'D':b+="1101";break; 

                case 'E':b+="1110";break; 

                case 'F':b+="1111";break; 

                default:break; 

            } 

        } 

        //计算转变成二进制的长度及添加'0',凑足3的倍数

        int len=b.length(); 

        if(len%3==1)

            b="00"+b; 

        else if(len%3==2) 

            b="0"+b;

//二进制转八进制 

        int flag=0; 

        for(int i=0;i<=b.length()-3;i+=3) 

        { 

            int num=4*(b[i]-'0')+2*(b[i+1]-'0')+(b[i+2]-'0'); 

            if(num) 

                flag=1;

            if(flag) 

                cout<<num; 

        } 

        cout<<endl; 

    } 

    return 0; 

}

…………………………………………………

/*  基础练习 时间转换 

时间限制:1.0s  内存限制:512.0MB

提交此题  锦囊1  锦囊2

问题描述

  给定一个以秒为单位的时间t,要求用“<H>:<M>:<S>”的格式来表示这个时间。<H>表示时间,<M>表示分钟,而<S>表示秒,它们都是整数且没有前导的“0”。例如,若t=0,则应输出是“0:0:0”;若t=3661,则输出“1:1:1”。

输入格式

  输入只有一行,是一个整数t(0<=t<=86399)。

输出格式

  输出只有一行,是以“<H>:<M>:<S>”的格式所表示的时间,不包括引号。

样例输入

0

样例输出

0:0:0

样例输入

5436

样例输出

1:30:36

*/

…………………………………………………

#include<iostream>

using namespace std;

int main()

{

int t;

cin>>t;

int h,m,s;

h=t/3600;

m=t/60%60;

s=t%60;

cout<<h<<":"<<m<<":"<<s<<endl;

return 0;

}

…………………………………………………

潜修亮剑一 潜修亮剑一
上一篇 下一篇

猜你喜欢

热点阅读