给定一个整数N,找出满足条件m + sum(m)+ sum(sum(m))= N的数字(m)的计数,其中sum(m)表示m中的数字之和。给定N <= 10e9。
例子:
Input: 9
Output: 1
Explanation: Only 1 positive integer satisfies
the condition that is 3,
3 + sum(3) + sum(sum(3)) = 3 + 3 + 3
= 9
Input: 9939
Output: 4
Explanation: m can be 9898, 9907, 9910 and 9913.
9898 + sum(9898) + sum(sum(9898))
= 9898 + 34 + 7 = 9939.
9907 + sum(9907) + sum(sum(9907))
= 9907 + 25 + 7 = 9939.
9910 + sum(9910) + sum(sum(9910))
= 9910 + 19 + 10 = 9939.
9913 + sum(9913) + sum(sum(9913))
= 9913 + 22 + 4 = 9939.
方法:首先要注意的是,给定约束N <= 10e9。这意味着sum(x)的任何数字最大为81,这是因为10e9以下的最大数字为999999999,其数字加起来为81。sum(sum(x))的最大情况为16(数字为79) <= 81),因此最多需要检查81 + 16(即97)。我们只需要从N – 97迭代到N并检查哪些整数满足该方程式,因为没有小于N-97的整数可以满足该方程式,任何大于N的整数也不能满足该方程式。
下面是上述方法的实现。
C++
// CPP program to count numbers
// satisfying equation.
#include
using namespace std;
// function that returns sum of
// digits in a number
int sum(int n)
{
int rem = 0;
// initially sum of digits is 0
int sum_of_digits = 0;
// loop runs till all digits
// have been extracted
while (n > 0) {
// last digit from backside
rem = n % 10;
// sums up the digits
sum_of_digits += rem;
// the number is reduced to the
// number removing the last digit
n = n / 10;
}
// returns the sum of digits in a number
return sum_of_digits;
}
// function to calculate the count of
// such occurrences
int count(int n)
{
// counter to calculate the occurrences
int c = 0;
// loop to traverse from n-97 to n
for (int i = n - 97; i <= n; i++) {
// calls the function to calculate
// the sum of digits of i
int a = sum(i);
// calls the function to calculate
// the sum of digits of a
int b = sum(a);
// if the summation is equal to n
// then increase counter by 1
if ((i + a + b) == n) {
c += 1;
}
}
// returns the count
return c;
}
// driver program to test the above function
int main()
{
int n = 9939;
// calls the function to get the answer
cout << count(n) << endl;
return 0;
}
Java
// Java program to count numbers
// satisfying equation.
import java.io.*;
class GFG {
// function that returns sum of
// digits in a number
static int sum(int n)
{
int rem = 0;
// initially sum of digits is 0
int sum_of_digits = 0;
// loop runs till all digits
// have been extracted
while (n > 0)
{
// last digit from backside
rem = n % 10;
// sums up the digits
sum_of_digits += rem;
// the number is reduced to the
// number removing the last digit
n = n / 10;
}
// returns the sum of digits in a number
return sum_of_digits;
}
// function to calculate the count of
// such occurrences
static int count(int n)
{
// counter to calculate the occurrences
int c = 0;
// loop to traverse from n-97 to n
for (int i = n - 97; i <= n; i++)
{
// calls the function to calculate
// the sum of digits of i
int a = sum(i);
// calls the function to calculate
// the sum of digits of a
int b = sum(a);
// if the summation is equal to n
// then increase counter by 1
if ((i + a + b) == n)
{
c += 1;
}
}
// returns the count
return c;
}
// driver program to test the above function
public static void main (String[] args)
{
int n = 9939;
// calls the function to get the answer
System.out.println ( count(n) );
}
}
// This article is contributed by vt_m
Python3
# Python program
# to count numbers
# satisfying equation.
# function that returns sum of
# digits in a number
def sum(n):
rem = 0
#initially sum of digits is 0
sum_of_digits = 0
# loop runs till all digits
# have been extracted
while (n > 0):
# last digit from backside
rem = n % 10
# sums up the digits
sum_of_digits += rem
# the number is reduced to the
# number removing the last digit
n = n // 10
# returns the sum
# of digits in a number
return sum_of_digits
# function to calculate
# the count of
# such occurrences
def count(n):
# counter to calculate the occurrences
c = 0
# loop to traverse from n - 97 to n
for i in range(n - 97,n+1):
# calls the function to calculate
# the sum of digits of i
a = sum(i)
# calls the function to calculate
# the sum of digits of a
b = sum(a)
# if the summation is equal to n
# then increase counter by 1
if ((i + a + b) == n):
c += 1
# returns the count
return c
# driver program to test
# the above function
n = 9939
# calls the function
# to get the answer
print(count(n))
# This code is contributed
# by Anant Agarwal.
C#
// C# program to count numbers
// satisfying equation.
using System;
class GFG {
// function that returns sum
// of digits in a number
static int sum(int n)
{
int rem = 0;
// initially sum of
// digits is 0
int sum_of_digits = 0;
// loop runs till all digits
// have been extracted
while (n > 0)
{
// last digit from
// backside
rem = n % 10;
// sums up the digits
sum_of_digits += rem;
// the number is reduced
// to the number removing
// the last digit
n = n / 10;
}
// returns the sum of
// digits in a number
return sum_of_digits;
}
// function to calculate the
// count of such occurrences
static int count(int n)
{
// counter to calculate
// the occurrences
int c = 0;
// loop to traverse from n-97 to n
for (int i = n - 97; i <= n; i++)
{
// calls the function to calculate
// the sum of digits of i
int a = sum(i);
// calls the function to calculate
// the sum of digits of a
int b = sum(a);
// if the summation is equal to n
// then increase counter by 1
if ((i + a + b) == n)
{
c += 1;
}
}
// returns the count
return c;
}
// Driver Code
public static void Main ()
{
int n = 9939;
// calling the function
Console.Write ( count(n) );
}
}
// This code is contributed by Nitin Mittal.
PHP
0)
{
// last digit from backside
$rem = $n % 10;
// sums up the digits
$sum_of_digits += $rem;
// the number is reduced to the
// number removing the last digit
$n = $n / 10;
}
// returns the sum of
// digits in a number
return $sum_of_digits;
}
// function to calculate the
// count of such occurrences
function countt($n)
{
// counter to calculate
// the occurrences
$c = 0;
// loop to traverse
// from n-97 to n
for ($i = $n - 97; $i <= $n; $i++)
{
// calls the function to calculate
// the sum of digits of i
$a = sum($i);
// calls the function to calculate
// the sum of digits of a
$b = sum($a);
// if the summation is equal to n
// then increase counter by 1
if (($i + $a + $b) == $n)
{
$c += 1;
}
}
// returns the count
return $c;
}
// Driver Code
$n = 9939;
// calls the function
// to get the answer
echo countt($n) ;
//This code is contributed by nitin mittal.
?>
输出:
4