在此程序中,我们给了Q个查询,每个查询都有一个正整数N。我们的任务是创建一个程序,以解决C ++中所有数字因数的奇数位和之和的查询。
问题描述-要解决每个查询,我们需要找到数字N的所有因子。然后将所有数字总和为奇数的因子相加。并返回每个查询的最终总和。
让我们举个例子来了解这个问题,
Q = 2, queries = {15, 8}
输出结果
8 1
对于查询1:N = 15,因子15为1、3、5、15。
因数中的奇数和是1 + 3 + 5 = 8
对于查询2:N = 8,因数8为1、2、4、8。
因数中的奇数之和是1 = 1
为了解决这个问题,我们需要对所有数字的奇数位求和。从中我们将计算因子,然后将其添加为结果。为了使这个数字处理总和,我们可以使用预先计算的值。例如,数字41的总和可以作为4的奇数位+ 3的奇数位之和找到。
创建oddDigitSum数组后,我们将找到可以除以给定数字的所有数字。然后,我们将使用oddDigitSum数组添加所有奇数位。
该程序说明了我们解决方案的工作原理,
#include <iostream> using namespace std; #define N 99999 void calcOddDigitSum(int oddDigitSum[]) { for (int i = 1; i < N; i++) oddDigitSum[i] = oddDigitSum[i / 10] + (i & 1) * (i % 10); } void findFactorSum(int oddDigitSum[], int factorSum[]) { for (int i = 1; i < N; i++) for (int j = i; j < N; j += i) factorSum[j] += oddDigitSum[i]; } int main(){ int Q = 3; int query[] = { 5, 154, 98 }; int oddDigitSum[N]; int factorSum[N]; calcOddDigitSum(oddDigitSum); findFactorSum(oddDigitSum, factorSum); for (int i = 0; i < Q; i++) cout<<"For query "<<(i+1)<<": The sum of odd number digit sums of all the factors of a number is "<<factorSum[query[i]]<<endl; return 0; }
输出结果
For query 1: The sum of odd number digit sums of all the factors of a number is 6 For query 2: The sum of odd number digit sums of all the factors of a number is 31 For query 3: The sum of odd number digit sums of all the factors of a number is 27