1.大小端整数
计算机中对整型数据的表示有两种方式:大端序和小端序,大端序的高位字节在低地址,小端序的高位字节在高地址。例如:对数字 65538,其4字节表示的大端序内容为00 01 00 02,小端序内容为02 00 01 00。
现输入一个字符串表示的十进制整数(含负数),请分别输出以4字节表示的大端序和小端序:
- 负数以补码形式表示。
- 如果输入的整数的值超出 [-2^31, 2^32) 范围,则输出字符串overflow。
解答要求
时间限制: C/C++ 1000ms, 其他语言:2000ms
内存限制: C/C++ 64MB, 其他语言:128MB
输入
十进制整数,以负号-开头表示负数,其它为正整数;数字长度范围:[1,32]。
输入数字不含前导零。
输出
大端序 + \n + 小端序;或字符串overflow。
大端序和小端序的输出格式:每个字节以两位16进制数字表示(16进制数中A-F要大写),字节之间以单空格分隔。
样例1
复制输入:
-10
复制输出:
FF FF FF F6 F6 FF FF FF
解释:
含负号表示为负整数。
该负整数的补码表示为 FF FF FF F6,其对应大端序和小端序内容分别为FF FF FF F6 和 F6 FF FF FF。
按输出格式要求输出其大端序和小端序内容,中间加换行符。
样例2
复制输入:
4027691818
复制输出:
F0 11 B3 2A 2A B3 11 F0
解释:
输入 4027691818 为正整数,按输出格式要求输出其大端序和小端序内容,中间加换行符。
样例3
复制输入:
1234567890123456789012345678900
复制输出:
overflow
解释:
输入数字超过[-2^31, 2^32) 范围,因此输出 overflow 。
C++代码:
#include #include #include #include #include #include using namespace std; class Solution { public: // 待实现函数,在此函数中填入答题代码; string GetHexString(long long input) { // Check for overflow if (input = 4294967296LL) { return "overflow"; } // Convert input to unsigned int unsigned int value = static_cast(input); // Convert unsigned int to big endian and little endian strings stringstream bigEndianStream; bigEndianStream {"idle", -1}, {"busy", 1}, {"no-response", 2}, {"unreachable", 3}}; // 存储用户设置的呼叫转移 for (auto ® : regCallForwardNums) { callForwards[reg.first] = reg.second; } if (status == "idle" && callForwards.count(0) == 0) { // 用户状态为idle,且无无条件转移type=0 return "success"; } if (callForwards.count(0)) { // 检查是否有无条件转移 return callForwards[0]; } else if (statusMap.count(status) && callForwards.count(statusMap[status])) { // 检查用户状态对应的转移 return callForwards[statusMap[status]]; } else if (callForwards.count(4)) { // 检查默认转移 return callForwards[4]; } // 没有匹配的转移则失败 return "failure"; } }; // 以下为考题输入输出框架,此部分代码不建议改动 inline string ReadLine() { string line; getline(cin, line); return line; } inline vector public: // 待实现函数,在此函数中填入答题代码; int GetCountOfSubString(const string &input) { if (input.empty()) { return 0; } int n = input.size(); int lastPos[26]; fill_n(lastPos, 26, -1); // 初始化每个字符的最后位置为-1 long long totalCount = 0; // 结果可能很大,使用更大的存储类型 int start = 0; // 窗口的起始位置 for (int end = 0; end