\d+\.\d+ 解释
时间: 2023-09-16 21:15:18 浏览: 102
c代码-求2+4+6+...+100
根据题意,给定一个整数 k 和一个 k 位整数 n=d[k-1]d[k-2]...d[1]d[0],其中每一位数字 d[i] 满足 0≤d[i]≤9,需要计算以下两个值:
1. 数字 n-1,n-2,...,n-k+1 的和。
2. 数字 n-1,n-2,...,n-k+1 的十进制表示中,所有数字 1 的个数。
下面分别介绍两种解法:
解法一:暴力模拟
可以直接模拟数字 n-1,n-2,...,n-k+1,计算它们的和并统计其中数字 1 的个数。具体地,我们可以从 n-1 开始逐个减去 1,每次减完之后将得到的数按位分解,统计其中数字 1 的个数即可。对于每个数字,可以用取模和除法来依次获取它的各个位。
算法的时间复杂度为 O(k(n-1)),其中 n 是输入整数,k 是它的位数。
解法二:找规律
我们可以尝试找到数字 n-1,n-2,...,n-k+1 的和和数字 1 的个数之间的规律。不难发现,这两个问题的答案都只与数字 d[k-1]~d[0] 有关,与其他位上的数字无关。
设 S 表示数字 n-1,n-2,...,n-k+1 的和,C 表示其中数字 1 的个数,则有:
S = (d[k-1]-1)×10^(k-1) + (d[k-2]-1)×10^(k-2) + ... + (d[1]-1)×10 + d[0]×k
C = (d[k-1]≥1) + (d[k-2]≥1) + ... + (d[1]≥1) + (d[0]≥1) + (d[k-1]-1)×(k-1)×10^(k-2) + (d[k-2])×(k-2)×10^(k-3) + ... + (d[1])×1×10^0
可以用上面的公式计算出 S 和 C。
算法的时间复杂度为 O(k),可以很快计算出结果。
阅读全文