/*基础练习 十六进制转八进制
时间限制: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;
}
…………………………………………………