1 条题解

  • 0
    @ 2025-2-11 16:01:22

    正确代码:

    #include <bits/stdc++.h>
    using namespace std;
    // 动态数组 a 用于存储高精度数字的各位
    vector<int> a; 
    // 输入的字符串
    string str;
    // 高精度除法函数:计算高精度数能否被 x 整除
    int divi(int x) { 
    	// a[0] 存储数字的长度,i 从 a[0] 开始
    	int i = a[0], res = 0; 	
    	// 从最高位开始进行除法
    	while (i > 0) {
    		res *= 10;             // 移动一位
    		res += a[i];           // 将当前位加到结果中
    		res %= x;              // 对 x 取模,保持余数
    		i--;                   // 移动到下一位
    	}
    	return res;  // 返回余数
    }
    int main() {
    	int len;           // 存储输入字符串的长度
    	bool flag = false; // 用于判断是否能整除,如果能整除就输出,否则输出 "none"	
    	// 输入一个字符串形式的数字
    	cin >> str;	
    	// 获取字符串长度
    	len = str.size();  	
    	// 调整动态数组大小,a[0] 保存数字的长度,a[1..len] 保存数字的各个数字
    	a.resize(len + 1); 	
    	int k = 1;  // k 用于从数组的第一个有效位置开始存储数字	
    	// 将字符串反向存入数组 a 中,a[k] 存储数字的每一位
    	for (int i = len - 1; i >= 0; i--) {
    		a[k] = str[i] - '0';  // 将字符转换为对应的整数
    		k++;                   // 移动到下一个位置
    	}	
    	// a[0] 存储数字的长度
    	a[0] = len;	
    	// 判断 2 到 9 中的每个数字是否能整除输入的高精度数
    	for (int i = 2; i <= 9; i++) {
    		if (divi(i) == 0) {  // 如果能整除,余数为 0
    			flag = true;      // 设置 flag 为 true,表示找到了能整除的数
    			cout << i << " "; // 输出能整除的数
    		}
    	}
    	// 如果没有找到能整除的数,输出 "none"
    	if (!flag)
    		cout << "none" << endl;	
    	return 0;
    }
    
    
    • 1

    信息

    ID
    651
    时间
    1000ms
    内存
    256MiB
    难度
    9
    标签
    递交数
    12
    已通过
    6
    上传者