A-位数求和
程序员文章站
2022-05-14 10:02:02
...
链接:https://ac.nowcoder.com/acm/contest/6220/A
来源:牛客网
牛牛想知道所有的长度为n的数中,各个位上的数字之和为m的这些数的和是多少呢。给定n和m,求这些数的和。
由于数据不大所以1e6暴力跑一次就完事了
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;
for(int i=1;i<=1e6;i++)
{
int x=i,s=0,c=0;
while(x)
{
s+=x%10;
c++;
x/=10;
}
if(s==m&&c==n)ans+=i;
}
return ans;
}
};
方法二:从所需要的区间开始遍历求和
class Solution {
public:
/**
* 返回这样的数之和
* @param n int整型 数的长度
* @param m int整型 各个为之和
* @return long长整型
*/
int power(int n) {
int ret = 1;
for(int i=1;i<n;i++) ret*=10;
return ret;
}
long long sum(int n, int m) {
// write code here
long long ans = 0;
int t=power(n);
for( int i = t;i <= t*10-1;i++ ) {
int tmp = i,sum = 0;
while(tmp) {
sum += tmp %10;
tmp /=10;
}
if( sum == m ) ans += i;
}
return ans;
}
};