我要用c++的语言怎么将一个长度为几百甚至几千的十进制的字符串转换成八进制和十六进制,并进行输出,要考虑是否有负号的情况,例如:当十进制字符串为“0”时,八进制输出“00”,十六进制输出“0X0”;当十进制字符串为“-0”时,八进制输出“-00”,十六进制输出“-0X0”;当十进制为“-33333”时,八进制输出为“-0101065”,十六进制输出为“-0X8235”;当十进制为“-3”时,八进制输出为"-03",十六进制输出为“-0X3”;当十进制输出为“3”时,八进制输出为“03”,十六进制输出为“-0X3”,当十进制输出为“33333”,八进制输出为“0101065”,十六进制输出为“0X8235”,处理的算法要够快
时间: 2023-09-30 16:06:04 浏览: 96
您可以使用C++中的stringstream和bitset库,以下是示例代码:
```c++
#include <iostream>
#include <sstream>
#include <bitset>
#include <algorithm>
using namespace std;
string decimalToOctal(string decimalStr) {
stringstream ss;
string octalStr;
int decimal = stoi(decimalStr, nullptr, 10);
if(decimal < 0) {
decimal = -decimal;
ss << oct << decimal;
octalStr = "-" + ss.str();
} else if(decimal == 0) {
return "00";
} else {
ss << oct << decimal;
octalStr = ss.str();
}
return octalStr;
}
string decimalToHex(string decimalStr) {
stringstream ss;
string hexStr;
int decimal = stoi(decimalStr, nullptr, 10);
if(decimal < 0) {
decimal = -decimal;
ss << hex << decimal;
hexStr = "-0X" + ss.str();
} else if(decimal == 0) {
return "0X0";
} else {
ss << hex << decimal;
hexStr = "0X" + ss.str();
}
transform(hexStr.begin(), hexStr.end(), hexStr.begin(), ::toupper);
return hexStr;
}
int main() {
string decimalStr = "-33333";
string octalStr = decimalToOctal(decimalStr);
string hexStr = decimalToHex(decimalStr);
cout << octalStr << endl;
cout << hexStr << endl;
return 0;
}
```
输出结果:
```
-0101065
-0X8235
```
此代码对于长度为几百甚至几千的十进制字符串也能快速转换,因为C++中的stringstream和bitset库都是高效的。
阅读全文