#include #include using namespace std;

// 计算数位之和 int digitSum(int num) { int sum = 0; while (num > 0) { sum += num % 10; num /= 10; } return sum; }

// 求最大数 int getMaxNumber(int n) { vector digits; int sum = n; // 从9开始,逐位减去数位之和,直到sum为0 for (int i = 9; i >= 1 && sum > 0; i--) { if (sum >= i) { sum -= i; digits.push_back(i); } } // 如果sum不为0,说明无法组成最大数,返回-1 if (sum > 0) { return -1; } // 拼接最大数 int maxNum = 0; for (int i = digits.size()-1; i >= 0; i--) { maxNum = maxNum * 10 + digits[i]; } return maxNum; }

int main() { int t; cin >> t; while (t--) { int n; cin >> n; int maxNum = getMaxNumber(n); cout << maxNum << endl; } return 0; }

C++实现最大十进制数字生成算法 - 优化后的代码与讲解

原文地址: https://www.cveoy.top/t/topic/pXyl 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录