Java 实现数字串权值计算 - 前导零问题
使用Java实现数字串权值计算 - 前导零问题
小红定义一个数字串的权值为:奇数位的和乘以偶数位的和。
奇数位指下标为奇数的位置,偶数位同理,下标从1开始。
例如数字串'114514',奇数位的和为1+4+1=6,偶数位的和为1+5+4=10。
现在小红想知道所有长度为n的数字串可以有前导0,它们的权值和对应的数字串是多少。
代码实现
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
scanner.close();
long result = calculateWeightSum(n);
System.out.println(result);
}
private static long calculateWeightSum(int n) {
long sum = 0;
for (int i = 0; i < Math.pow(10, n); i++) {
String numStr = String.format('%0' + n + 'd', i); // 使用前导0补齐数字串长度
long oddSum = 0;
long evenSum = 0;
for (int j = 0; j < numStr.length(); j++) {
int digit = Character.getNumericValue(numStr.charAt(j));
if ((j + 1) % 2 == 1) {
oddSum += digit;
} else {
evenSum += digit;
}
}
sum += oddSum * evenSum;
}
return sum;
}
}
输入示例
3
输出示例
20825
代码解释
calculateWeightSum(n)函数计算所有长度为n的数字串的权值和。- 使用
for循环遍历所有长度为n的数字串,并使用String.format('%0' + n + 'd', i)方法保证数字串长度为n,并在前面补0。 - 使用两个变量
oddSum和evenSum分别记录奇数位和偶数位数字的和。 - 循环遍历每个数字串的每一位,判断其下标是否为奇数或偶数,并将其添加到对应变量中。
- 最后将奇数位和与偶数位和相乘,并累加到
sum变量中。
代码优化建议
- 可以使用更简洁的循环遍历方法,例如使用
for (int i = 0; i < n; i++)遍历数字串,然后通过i % 2判断当前下标是否为奇数。 - 可以使用
StringBuilder对象来拼接数字串,以提高效率。 - 可以使用
BigInteger类型来存储权值和,以避免数据溢出。 - 可以使用缓存机制来存储已经计算过的权值和,以提高效率。
希望本文能够帮助你理解使用Java实现数字串权值计算,并提供一些代码优化建议。
原文地址: https://www.cveoy.top/t/topic/qvEP 著作权归作者所有。请勿转载和采集!