当前位置: 首页 > news >正文

/////////

思路:用字符串模拟

#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数据库

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

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

    • 键值存储:简化模型

 

http://www.dtcms.com/a/108929.html

相关文章:

  • [MySQL初阶]MySQL库的操作
  • 位置编码(Positional Encoding, PE)的作用
  • 开源AI模型落地教程:如何在个人电脑安装并运行QwQ-32B大模型
  • 【MyBatis】深入解析 MyBatis:关于注解和 XML 的 MyBatis 开发方案下字段名不一致的的查询映射解决方案
  • 【Linux】动静态库知识大梳理
  • Android Gradle、Android Gradle Plugin、BuildTool关系
  • 真实笔试题
  • Smallworld Geo Network Management(GNM):电力-通信-公共设施GIS平台
  • 树莓派 5 部署 OMV(OpenMediaVault)
  • 解决docker的ubuntu系统中文乱码问题
  • 【HarmonyOS Next之旅】DevEco Studio使用指南(十)
  • 深度学习 Deep Learning 第16章 结构化概率模型
  • STM32单片机入门学习——第10节: [4-2] OLED显示屏
  • 图扑 HT 电缆厂 3D 可视化管控系统深度解析
  • Tmux 核心操作速查指南
  • 解释回溯算法,如何应用回溯算法解决组合优化问题?
  • Android Settings 有线网设置界面优化
  • 基于springboot的考研成绩查询系统(源码+lw+部署文档+讲解),源码可白嫖!
  • 【C++】Cplusplus进阶
  • 2025徘徊与坚守:在传统与变革间寻找自己
  • 启服云专利管理系统:铸就知识产权保护的坚固壁垒
  • 基于YOLOv8的热力图生成与可视化:支持自定义模型与置信度阈值的多维度分析
  • Python第七章08:导入自定义(个性化)模块
  • 程序化广告行业(55/89):DMP与DSP对接及数据统计原理剖析
  • 06-公寓租赁项目-后台管理-公寓管理篇
  • tomcat 屏蔽版本号
  • 2024青少年信息素养大赛 C++智能算法初赛 小学组 全年级 真题答案详细解析
  • Android 搜索蓝牙界面禁止横屏
  • 【计算机网络应用层】
  • 如何根据用户活跃时间调整邮件发送策略?