C++如何实现将5位整数转换为指定格式的数字金字塔
问题解答
你问的是否需要单独提取每一位数字:是的,不管用哪种实现方式,都需要先把5个位置的数位单独提取出来再按格式拼接输出。
你自己贴的转字符串提取的实现逻辑是完全可行的,唯一可以补充优化的点是增加输入合法性校验,避免输入非5位整数时出现数组越界问题。
两种实现方案
方案1:字符串提取法(你现有实现的优化版)
直接将输入的整数转为字符串,通过下标直接获取对应位置的数位,代码简单易读,不容易出错:
#include <iostream> #include <string> #include <sstream> using namespace std; int main() { int num; string str; cout << "Type a 5-digit number: "; cin >> num; // 输入合法性校验 if (num < 10000 || num > 99999) { cout << "输入不是合法的5位整数" << endl; return 1; } stringstream ss; ss << num; ss >> str; char x0 = str[4]; char x1 = str[3]; char x2 = str[2]; char x3 = str[1]; char x4 = str[0]; cout << " " << x2 << endl; cout << " " << x3 << x2 << x1 << endl; cout << x4 << x3 << x2 << x1 << x0 << endl; return 0; }
方案2:数学运算提取法
不需要引入字符串相关库,直接用整数除法和取余运算提取每一位:
#include <iostream> using namespace std; int main() { int num; cout << "Type a 5-digit number: "; cin >> num; if (num < 10000 || num > 99999) { cout << "输入不是合法的5位整数" << endl; return 1; } int x4 = num / 10000; int x3 = (num / 1000) % 10; int x2 = (num / 100) % 10; int x1 = (num / 10) % 10; int x0 = num % 10; cout << " " << x2 << endl; cout << " " << x3 << x2 << x1 << endl; cout << x4 << x3 << x2 << x1 << x0 << endl; return 0; }
两种方案输出效果完全一致,输入12345时都会输出你给出的示例效果。
内容的提问来源于stack exchange,提问作者Lupu Claudiu
相关产品推荐
相关产品推荐

