C++
有錯誤敬請指教
#include<iostream>
#include<string>
#include<vector>
#include<climits>
int tenBaseTo2_8_16(int num){
std::vector<int> num2;
std::vector<int> num8;
std::vector<std::string> num16;
int length;
int neg=0;
if(num<0){
num=abs(num);
neg++;
}
//二進位
int temp=num;
while(temp!=0){
num2.push_back(temp%2);
temp=temp/2;
}
length=num2.size();
if(neg==1){
std::cout<<"-";
}
for(int i=0;i<length;i++){
std::cout<<num2.back();
num2.pop_back();
}
std::cout<<" ";
//八進位
temp=num;
while(temp!=0){
num8.push_back(temp%8);
temp=temp/8;
}
length=num8.size();
if(neg==1){
std::cout<<"-";
}
for(int i=0;i<length;i++){
std::cout<<num8.back();
num8.pop_back();
}
std::cout<<" ";
//十六進位
temp=num;
while(temp!=0){
int r=temp%16;
if(r>=0&&r<=9){num16.push_back(std::to_string(r));
}else if(r==10){ num16.push_back("A");}
else if(r==11){ num16.push_back("B");}
else if(r==12){ num16.push_back("C");}
else if(r==13){ num16.push_back("D");}
else if(r==14){ num16.push_back("E");}
else if(r==15){ num16.push_back("F");}
temp=temp/16;
}
length=num16.size();
if(neg==1){
std::cout<<"-";
}
for(int i=0;i<length;i++){
std::cout<<num16.back();
num16.pop_back();
}
std::cout<<std::endl;
}
int main() {
std::string num;
while (getline(std::cin, num)) {
try {
// 檢查輸入是否為空
if (num.empty()) {
std::cout << "按Enter幹嘛" << std::endl;//考試請好好輸出
break; // 結束程式
}
// 檢查輸入是否為數字或負號開頭
size_t startPos = 0;
if (num[0] == '-') {
startPos = 1; // 如果是負號,從第二個字元開始檢查
}
// 檢查數字是否在 int 範圍內
int temp = std::stoi(num, &startPos);
if (startPos != num.length() || temp < INT_MIN || temp > INT_MAX) {
throw std::invalid_argument("Invalid input");
}
// 如果是 0,直接輸出
if (temp == 0) {
std::cout << "0 0 0" << std::endl;
} else {
tenBaseTo2_8_16(temp);
}
} catch (const std::invalid_argument& e) {
std::cout << "工三小" << std::endl; //考試時請好好輸出
} catch (const std::out_of_range& e) {
std::cout << "超過了啦==" << std::endl; //考試請好好輸出
}
}
return 0;
}
terminal