9.13

发布时间 2023-09-13 20:46:56作者: 七安。

d同学爱上了隔壁班的学霸美女学姐L只因,可是L只因是一个特立独行的计算机算法大佬,她在说话的时候会将所有的数字转换为十六进制表示,为了鉴定d同学是不是渣男,L只因想要考验他一下,于是向他提出要求:如果你能将我说的数字转化成二进制数存进电脑里,那我就接受你的追求。

这可把d同学高兴坏了,可是问题来了,d同学是一个学渣,每天除了吃喝拉撒,一点计算机知识都不会,为了帮d同学追求L只因学姐,你能帮她设计一个程序将学姐的考验通过么。

输入格式:

一个整数t,代表测试个数

接下来每个测试有一行为十六进制字符串s

输出格式:

每一个s输出一行为其二进制转换

输入样例:

3
520
0
0FF

输出样例:

10100100000
0
11111111

数据范围及约定

注意输出去除前导零
输入数据中有前导零数据
1<=t<=1000
1<=length(s)<=1000
十六进制(简写为hex或下标16)是一种基数为16的计数系统,是一种逢16进1的进位制。通常用数字0123456789和字母ABCDEFabcdef)表示,其中:AF表示1015,这些称作十六进制数字。
本题中的十六进制输入数据均为大写字母

单独一个0输出0即可

#include<iostream>
#include<cstring>
#include<cmath>
using namespace std;
void change(char arr[1010],int len) {
    int flag=0;
    for(int i=0; i<len; i++) {
        int dig=0;
        if(((arr[i]-'0')>=0)&&((arr[i]-'0')<=9)) {
            dig=arr[i]-'0';
        } else {
            dig=arr[i]-'A'+10;
        }
        for(int k=3; k>=0; k--) {
            int bit=(dig>>k)&1;
            if(i==0) {
                if(bit!=0) {
                    flag=1;
                    cout<<bit;
                } else if(bit==0&&flag==1) {
                    cout<<bit;
                }
            } else {
                cout<<bit;
            }
        }
    }
}
int main() {
    int x;
    cin>>x;
    char a[1010];
    for(int i=0; i<x; i++) {
        cin>>a;
        int len=strlen(a);
        if((len==1)&&(a[0]=='0')) {
            if(i!=(x-1))
            {
                cout<<0<<endl;
            }
            else
            {
                cout<<0;
            }
        } else {
            change(a,len);
            if(i!=(x-1)) {
                cout<<endl;
            }
        }
    }
    return 0;
}

小蒲非常喜欢刷b站,天天都去刷,作为2017年才加入b站的萌新,白嫖了好多年,积攒了上千的硬币,以至于他现在才5级,于是他想要快速积攒经验,众所周知,每天b站会给登录用户1枚硬币,1枚硬币的经验值为10经验值,每天最多可以投5枚硬币获得经验值,也就是每一天可以通过投币最多获得50经验,他想要以最快的方式通过投币获得最多的经验,直到他的硬币数为0时停止投币,请问他这期间能获得的经验值为多少,经过了多少天?

输入格式:

第一行输入一个整数T,代表数据的组数

接下来的T行,每一行有一个整数n,代表他今天拥有的硬币数(已经获得当天的奖励硬币)

输出格式:

输出T行,每一行两个数a,b,a代表他所获得的经验值,b代表经过了多少天。

输入样例:

1
6

输出样例:

70 2

样例解释

第一天:他拥有6枚硬币,他投5枚,获得了50点经验值。

第二天:奖励一枚硬币,他拥有2枚硬币,他投2枚,获得了20点经验值,剩余0枚硬币。

数据范围及约定

题目测试数据集保证T<=10000,1<=n<=1e12

#include<iostream>
using namespace std;
int main() {
    int t;
    cin>>t;
    for(int i=0; i<t; i++) {
        long long n;
        cin>>n;
        if(n<=5) {
            cout<<n*10<<" "<<1<<endl;
        } else {
            long  long count=n;
            long long day=0;
            while(n>=5) {
                count++;
                day++;
                n=n-5;
            }
            cout<<(count)*10<<" "<<++day<<endl;
        }
    }
    return 0;
}