欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 家装 > /////////

/////////

2025/7/13 23:18:39 来源:https://blog.csdn.net/2402_89056915/article/details/146991170  浏览:    关键词://///////

思路:用字符串模拟

#include <iostream>
#include <string>
#include <algorithm>
#include <vector>using namespace std;int main() {string s1, s2;cin >> s1 >> s2;if (s1 == "0" || s2 == "0") {cout << "0" << endl;return 0;}int len1 = s1.size();int len2 = s2.size();vector<int> result(len1 + len2, 0); for (int i = len1 - 1; i >= 0; i--) {int num1 = s1[i] - '0';for (int j = len2 - 1; j >= 0; j--) {int num2 = s2[j] - '0';int product = num1 * num2;int sum = product + result[i + j + 1];  result[i + j + 1] = sum % 10; result[i + j] += sum / 10;     }}int start = 0;while (start < result.size() && result[start] == 0) {start++;}for (int i = start; i < result.size(); i++) {cout << result[i];}cout << endl;return 0;
}

思路:高精度乘法和加法,这里也可以用数组存储优化

#include <iostream>
#include <vector>
using namespace std;void multiply(vector<int>& a, int b) {int carry = 0;for (int i = 0; i < a.size(); ++i) {int product = a[i] * b + carry;a[i] = product % 10;carry = product / 10;}while (carry > 0) {a.push_back(carry % 10);carry /= 10;}
}void add(vector<int>& sum, const vector<int>& a) {int carry = 0;int max_len = max(sum.size(), a.size());for (int i = 0; i < max_len; ++i) {int digit_sum = carry;if (i < sum.size()) digit_sum += sum[i];if (i < a.size()) digit_sum += a[i];if (i < sum.size()) {sum[i] = digit_sum % 10;} else {sum.push_back(digit_sum % 10);}carry = digit_sum / 10;}if (carry > 0) {sum.push_back(carry);}
}int main() {int n;cin >> n;vector<int> sum = {0};  vector<int> factorial = {1};  for (int k = 1; k <= n; ++k) {multiply(factorial, k);  add(sum, factorial);  }for (int i = sum.size() - 1; i >= 0; --i) {cout << sum[i];}cout << endl;return 0;
}

ER表(实体关系表)深度解析

一、ER表的核心要素扩展

1. 实体类型的高级表示

  • 弱实体:用双边框表示,依赖其他实体存在(如订单项依赖订单)

  • 复合实体:用于多对多关系的桥接表(如学生选课表)

  • 派生属性:可通过计算得到的属性(如年龄可从生日派生)

2. 关系的深度分类

  • 识别关系:弱实体与强实体的关系(虚线表示)

  • 非识别关系:常规实体间关系(实线表示)

  • 递归关系:同一实体内部的关系(如员工管理员工)

3. 属性的详细类型

  • 简单属性:不可再分的原子属性(如学号)

  • 复合属性:可分解为更小部分的属性(如地址可分解为省市区)

  • 多值属性:一个实例可有多个值(如一个人的多个电话号码)

  • 键属性:唯一标识实体的属性(下划线标注)

二、ER表设计进阶技巧

1. 规范化设计

  • 第一范式(1NF):消除重复组,确保原子性

  • 第二范式(2NF):消除部分函数依赖

  • 第三范式(3NF):消除传递函数依赖

  • BCNF:更严格的3NF变体

2. 关系基数表示法

复制

1:1   一对一(如员工-社保号)
1:N   一对多(如部门-员工)
N:M   多对多(如学生-课程)

3. 特殊关系处理

  • 三元关系:三个实体间的关系(如医生-患者-药品)

  • 超类型/子类型:继承关系(如人员→员工/学生)

  • 角色指示:同一实体在不同关系中的角色(如员工同时是项目成员和项目经理)

三、ER表到物理模型的转换

1. 转换规则

  • 强实体→独立表

  • 弱实体→依赖表(包含强实体主键)

  • 1:1关系→合并表或外键

  • 1:N关系→外键放在多方

  • N:M关系→新建关联表

2. 性能优化考虑

  • 反规范化:有意识引入冗余提高查询效率

  • 索引策略:对频繁查询字段建立索引

  • 分区设计:大数据量表的分区存储

四、ER表工具支持

1. 常用建模工具

  • 专业工具:ERwin, PowerDesigner, IBM Data Architect

  • 开源工具:MySQL Workbench, DBeaver, Dia

  • 在线工具:Lucidchart, Draw.io, dbdiagram.io

2. 版本控制集成

  • 使用Git管理ER模型变更

  • 差异比较工具进行版本比对

  • 自动化文档生成

五、ER表实际应用案例

1. 电商系统ER表示例

复制

[用户表]---1:N---[订单表]|               ||               N:M
[收货地址]      [订单商品表]---N:1---[商品表]

2. 医院管理系统ER表示例

复制

[医生表]---N:M---[患者表]---1:N---[病历表]|                 |N:M              1:N
[科室表]          [处方表]---N:1---[药品表]

六、常见设计陷阱与解决方案

  1. 过度使用多值属性→转换为关联表

  2. 忽略历史数据需求→添加时间戳字段

  3. 循环引用问题→引入中间实体打破循环

  4. 命名不一致→建立统一的命名规范

七、ER表与新型数据库

  1. 关系型数据库:严格遵循ER模型

  2. NoSQL数据库

    • 文档数据库:嵌入式文档代替关系

    • 图数据库:直接表示实体和关系

    • 键值存储:简化模型

 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com