题目

所有的长度为 n 的数中,各个位上的数字之和为 m 的这些数的和是多少呢。给定 n 和 m,求这些数的和。

解题思路

使用暴力法:
长度为 的数的范围是 。遍历该范围的数值,求出每个数的各个位上的数字之和 是否与 相等,
若相等,将这个数 累计加入最终结果

C++代码

class Solution {
public:
    /**
     * 返回这样的数之和
     * @param n int整型 数的长度
     * @param m int整型 各个为之和
     * @return long长整型
     */
    long long sum(int n, int m) {
        // write code here
        long long ans = 0;
        int start = pow(10, n-1);
        int end = pow(10, n) - 1;
        for(int i=start; i<=end; ++i){
            int tmp = i;
            int s = 0;
            while(tmp){
                s += tmp % 10;
                tmp /= 10;
            }
            if(s == m){
                ans += i;
            }
        }
        return ans;
    }
};