输入输出、按位运算

60 阅读1分钟

题目

image.png 说明:把每个数按位拆分,再排序重组成新的数

代码

自己写的

int ReverseNum(int val) {
	//将整数按位反转
	vector<int> arr;
	while (val != 0) {
		arr.push_back(val % 10);
		val /= 10;
	}
	//将val重构为新的数值
	val = 0;
	//表示倍数
	int bei = 1;
	for (int i = arr.size() - 1;i >= 0;i--) {
		val += (bei * arr[i]);
		bei *= 10;
	}
	return val;
}

int ReverseNumAndSort(int val) {
	//将整数按位排序并重组
	vector<int> arr;
	while (val != 0) {
		arr.push_back(val % 10);
		val /= 10;
	}

	sort(arr.begin(), arr.end());

	//将val重构为新的数值
	val = 0;
	//表示倍数
	int bei = 1;
	for (int i = arr.size() - 1;i >= 0;i--) {
		val += (bei * arr[i]);
		bei *= 10;
	}
	return val;
}

int main()
{
	int n;
	vector<int> curArr;
	vector<int> result;

	string s;
	int item;
	int curMaxVal = -1;

	while (true) {
		curMaxVal = -1;
		cin >> n;
		if (n == 0) {
			break;
		}
		while (n > 0)
		{
			//读取n个空格分隔的数
			cin >> item;
			int newVal = ReverseNumAndSort(item);
			if (newVal > curMaxVal) {
				curMaxVal = newVal;
			}
			n--;
		}
		//输出
		result.push_back(curMaxVal);
		//cout << curMaxVal << endl;
	}
	//输出result的结果
	for (int i : result) {
		cout << i << endl;
	}
}

chatgpt 答案

#include <iostream>
#include <vector>
#include <algorithm>
#include <string>

int restructuredNumber(int num) {
    // 将数字转换为字符串以便处理每个位
    std::string numStr = std::to_string(num);
    // 对字符串中的字符进行排序
    std::sort(numStr.begin(), numStr.end());
    // 将排序后的字符串转换回数字
    int restructuredNum = std::stoi(numStr);
    return restructuredNum;
}

int main() {
    while (true) {
        int n;
        std::cin >> n;
        if (n == 0) {
            break;
        }

        int maxNumber = 0;
        for (int i = 0; i < n; ++i) {
            int number;
            std::cin >> number;
            int restructuredNum = restructuredNumber(number);
            if (restructuredNum > maxNumber) {
                maxNumber = restructuredNum;
            }
        }

        std::cout << maxNumber << std::endl;
    }

    return 0;
}

机构答案

#include <bits/stdc++.h>
using namespace std;

int func(int num) {
    vector<int> t;
    while (num) {
        t.push_back(num % 10);
        num /= 10;
    }
    sort(t.begin(), t.end());
    int sum = 0;
    for (int i = 0; i < t.size(); i++) {
        sum *= 10;
        sum += t[i];
    }
    return sum;
}

int main() {
    int n;
    while (cin >> n) {
        int max = 0;
        int number;
        for (int i = 0; i < n; i++) {
            cin >> number;
            if (max < func(number)) {
                max = func(number);
            }
        }
        cout << max << endl;
    }
}