728. Self Dividing Numbers

本文介绍了一种筛选自除数数字的算法实现,通过遍历指定范围内的每个数字,检查其是否能被自身每一位非零数字整除,从而找出所有符合条件的自除数数字。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一个一个数字的判断是否满足要求就好咯

  vector<int> selfDividingNumbers(int left, int right) {
        vector<int> result;
        
        for(int i = left; i <= right; i++){
            bool flag = true;
            
            //后面用copy代替i来获得每一位数
            int copy = i;
            int every_digit = 0;
            while(copy != 0){
                every_digit = copy % 10;
                if(every_digit == 0 || i % every_digit != 0){
                    flag = false;
                    break;
                }
                copy = copy / 10;
                
                    
            }
            if(flag)
                result.push_back(i);
        }
        return result;
    }
### STM32H745 CAN FD 配置与示例 STM32H745 微控制器支持 CAN FD 功能,其配置方式与其他系列(如 G4 和 H7)相似,但在具体参数设置上可能有所不同。以下是基于 HAL 库的 STM32H745 的 CAN FD 初始化和使用的示例。 #### 初始配置 为了启用 CAN FD 功能,需要初始化 `hcan` 结构体并配置相关参数。以下是一个典型的初始化过程: ```c #include "stm32h7xx_hal.h" #include "stm32h7xx_hal_can.h" void MX_CAN_Init(void) { hcan.Instance = FDCAN1; // 配置仲裁阶段位定时器 hcan.Init.Prescaler = 8; // 波特率分频器 hcan.Init.SyncJumpWidth = 2; // 同步跳转宽度 hcan.Init.TimeSeg1 = 15; // 时间段 1 (TSEG1) hcan.Init.TimeSeg2 = 6; // 时间段 2 (TSEG2) hcan.Init.Mode = CAN_MODE_NORMAL; // 正常模式 hcan.Init.AutoBusOff = DISABLE; // 自动关闭总线禁用 hcan.Init.AutoWakeUp = ENABLE; // 自动唤醒使能 hcan.Init.AutoRetransmission = ENABLE; // 自动重传使能 // 数据阶段位定时器 hcan.Init.DataPrescaler = 2; // 数据波特率分频器 hcan.Init.DataSyncJumpWidth = 2; // 数据同步跳转宽度 hcan.Init.DataTimeSeg1 = 13; // 数据时间段 1 (DTSEG1) hcan.Init.DataTimeSeg2 = 3; // 数据时间段 2 (DTSEG2) if (HAL_OK != HAL_CAN_Init(&hcan)) { Error_Handler(); // 错误处理函数 } } ``` 上述代码中定义了 CAN FD 的两个主要部分:**仲裁阶段**和**数据阶段**的位定时器配置[^2]。这些参数决定了通信速率以及信号采样点的位置。 #### 发送消息 发送一条标准帧的消息可以通过如下方法完成: ```c static void CAN_SendMessage(uint32_t StdId, uint8_t *pData, uint8_t DLC) { CAN_TxHeaderTypeDef TxHeader; uint32_t Mailbox; TxHeader.StdId = StdId; // 标准ID TxHeader.ExtId = 0; // 扩展ID未使用 TxHeader.IDE = CAN_ID_STD; // 使用标准ID TxHeader.RTR = CAN_RTR_DATA; // 数据帧而非远程帧 TxHeader.DLC = DLC; // 数据长度码 if (HAL_OK == HAL_CAN_AddTxMessage(&hcan, &TxHeader, pData, &Mailbox)) { /* 消息成功加入队列 */ } else { /* 处理错误情况 */ } } // 调用示例 uint8_t data[] = {0x01, 0x02, 0x03, 0x04}; CAN_SendMessage(0x123, data, sizeof(data)); ``` 此代码片段展示了如何通过指定的标准 ID (`StdId`) 将一组数据发送到 CAN 总线上[^1]。 #### 接收消息 接收来自 CAN 总线的数据可以按照以下方式进行: ```c static void CAN_ReceiveMessage(CAN_HandleTypeDef* hcan, uint8_t* RxData) { CAN_RxHeaderTypeDef RxHeader; if (HAL_OK == HAL_CAN_GetRxMessage(hcan, CAN_RX_FIFO0, &RxHeader, RxData)) { /* 成功接收到消息 */ } else { /* 处理错误情况 */ } } // 调用示例 uint8_t received_data[8]; CAN_ReceiveMessage(&hcan, received_data); ``` 以上实现了从 FIFO 缓冲区读取接收到的信息,并将其存储至目标数组中。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值