You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言禁用逻辑等运算符时,数字组合与提取的实现求助

问题修复方案

整数溢出问题

你组合id_num时,start_year * 100000000这类乘法会直接超出int类型的存储上限(int最大约21亿),导致数值溢出计算错误。必须改用long long类型存储大数值:

long long year_diff = grad_year - start_year;
long long prog_years = year_diff % 100;
long long uniq_id = student_id % 10000;
long long id_num = (long long)start_year * 100000000 + (long long)program_num * 1000000 + prog_years * 10000 + uniq_id;

注意:给start_year和program_num做强制类型转换,避免乘法前先溢出

pow函数精度误差

pow是浮点函数,返回值可能存在精度偏差(比如pow(10,3)实际是999.9999999),强制转int后会得到错误的幂次值。改用预存整数幂次的数组替代浮点运算,同时符合禁止逻辑/关系运算符的要求:

// 预存10^0到10^12的整数值,覆盖12位数字的需求
static const long long powers_of_10[] = {1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000, 10000000000LL, 100000000000LL, 1000000000000LL};

// 修改后的提取代码
int loc_diff = loc2 - loc1;
long long div = powers_of_10[loc1 - 1];
long long desired_digits = (id_num / div) % powers_of_10[loc_diff + 1];

注意:id_num改为long long后,除法和取余运算也用long long类型,避免二次溢出

关键约束适配

由于禁止使用逻辑/关系运算符、布尔变量和选择结构,需确保输入参数在合法范围内:

  • start_year为4位数,program_num为2位数,保证组合后的id_num不超过long long范围
  • loc1、loc2为1-12之间的正整数,且loc1 <= loc2(无需校验,依赖输入合法性)

内容的提问来源于stack exchange,提问作者cactusgrandma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 09:02:56