【每天一道编程系列-2018.3.14】—— Trailing Zeros

本文介绍了一种高效算法,用于计算n阶乘结果中尾部零的数量。该算法采用除以5累加的方式,时间复杂度为O(logN),适用于快速解决相关问题。

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

【题目描述】



 O(log N) time

Write an algorithm which computes the number of trailing zeros in n factorial.

Example

11! = 39916800, so the out should be 2



【题目大意】



设计一个算法,计算出n阶乘中尾部零的个数



【本题答案】


package blog;

/**
 * @author yesr
 * @create 2018-03-14 下午10:44
 * @desc
 **/
public class Test0314 {
    /*
     * param n: As desciption return: An integer, denote the number of trailing
     * zeros in n!
     */
    public long trailingZeros(long n) {
        // write your code here
        long count = 0;
        long temp=n/5;
        while (temp!=0) {
            count+=temp;
            temp/=5;
        }
        return count;
    }
}




matlab读取TITLE = "fluent16.0.0 build-id: 10427" VARIABLES = "X" "Y" "Vorticity Magnitude" "Velocity" "Pressure" DATASETAUXDATA Common.DensityVar="19" DATASETAUXDATA Common.PressureVar="3" DATASETAUXDATA Common.TurbulentDynamicViscosityVar="23" DATASETAUXDATA Common.TurbulentKineticEnergyVar="12" DATASETAUXDATA Common.UVar="4" DATASETAUXDATA Common.VectorVarsAreVelocity="TRUE" DATASETAUXDATA Common.ViscosityVar="22" DATASETAUXDATA Common.VVar="7" ZONE T="Rectangular zone" STRANDID=0, SOLUTIONTIME=10.1499996 I=601, J=801, K=1, ZONETYPE=Ordered DATAPACKING=POINT DT=(SINGLE SINGLE SINGLE SINGLE SINGLE ) -9.000000358E-01 -9.000000358E-01 1.002435689E-03 1.000001550E+00 1.338337213E-01 -8.910000324E-01 -9.000000358E-01 1.308451639E-03 1.000004292E+00 1.338273883E-01 -8.820000291E-01 -9.000000358E-01 1.249879599E-03 1.000012040E+00 1.338108480E-01 -8.730000257E-01 -9.000000358E-01 9.235133766E-04 1.000025630E+00 1.337845922E-01 -8.640000224E-01 -9.000000358E-01 1.025002683E-03 1.000044823E+00 1.337496638E-01 -8.550000191E-01 -9.000000358E-01 1.331205131E-03 1.000069499E+00 1.337050945E-01 -8.460000157E-01 -9.000000358E-01 1.743018511E-03 1.000100851E+00 1.336492896E-01 -8.370000124E-01 -9.000000358E-01 1.912128180E-03 1.000138521E+00 1.335841864E-01 -8.280000091E-01 -9.000000358E-01 1.742910245E-03 1.000184178E+00 1.335078776E-01 -8.190000057E-01 -9.000000358E-01 1.830783789E-03 1.000236750E+00 1.334226429E-01 -8.100000620E-01 -9.000000358E-01 1.874378067E-03 1.000296950E+00 1.333269626E-01此类dat数据的代码
最新发布
04-01
### MATLAB 解析 Fluent DAT 文件的方法 为了实现从 Fluent 的 `.dat` 文件中提取变量定义和网格数据的功能,可以采用以下方法。以下是基于提供的引用以及常见实践编写的代码示例。 #### 方法概述 Fluent 输出的 `.dat` 文件通常包含两种主要的数据结构: 1. **头部信息**:描述变量名称、网格尺寸等元数据。 2. **数值数据**:具体存储节点坐标或物理量值。 MATLAB 提供了多种工具来解析这些文件,例如 `fopen`, `textscan`, 和正则表达式匹配功能。下面是一个完整的代码示例: ```matlab function [vars, data] = read_fluent_dat(filename) % READ_FLUENT_DAT Reads a Fluent .dat file and extracts variables and grid/data. % % Inputs: % filename - Path to the Fluent .dat file (string). % % Outputs: % vars - Cell array of variable names. % data - Matrix containing numerical values. fid = fopen(filename, 'r'); if fid == -1 error('Cannot open file %s', filename); end try % Read header information until we find "VARIABLES" line = fgetl(fid); while ischar(line) && ~contains(line, 'VARIABLES') line = fgetl(fid); end if contains(line, 'VARIABLES') varLine = regexprep(line, '^.*VARIABLES\s*=\s*', ''); vars = strsplit(varLine, ','); % Extract variable names vars = strip(vars); % Remove leading/trailing spaces % Skip lines until finding numeric data section ("ZONE" or similar marker) zoneFound = false; while ~zoneFound && ischar(line) line = fgetl(fid); if contains(line, 'ZONE') || isempty(strfind(line, char(0))) zoneFound = true; end end % Now parse the actual data block using textscan formatSpec = repmat('%f', 1, length(vars)); rawData = textscan(fid, sprintf(['%' num2str(length(vars)) 'f']), 'HeaderLines', 0, ... 'Delimiter', '\n', 'CollectOutput', true); fclose(fid); data = cell2mat(rawData{1}); % Convert from cell to matrix else warning('No VARIABLES definition found in file.'); fclose(fid); vars = {}; data = []; end catch ME fprintf('Error reading file: %s\n', ME.message); fclose(fid); rethrow(ME); end ``` 此函数实现了以下操作: - 打开指定路径下的 `.dat` 文件并逐行读取内容[^1]。 - 查找关键字 `"VARIABLES"` 来获取变量名列表[^3]。 - 跳过无关头信息直到找到数据区域(通过检测 `"ZONE"` 关键字完成)[^2]。 - 使用 `textscan` 函数按照列数自动调整格式化字符串以加载所有数值型数据。 #### 注意事项 上述脚本假设输入文件遵循标准 Fluent 导出格式。如果遇到特殊情况下不兼容的情况,则需进一步修改逻辑适应具体情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值