Count of n digit numbers whose sum of digits equals to given sum [ Amazon ]

Problem: Given two integers ‘n’ and ‘sum’, find count of all n digit numbers with sum of digits as ‘sum’. Leading 0’s are not counted as digits. Print your output % 10^9+7.

#include <stdio.h>

#define MOD 1000000007

unsigned long long dp[101][1001];

unsigned long long Count(int n,int sum)
{
    int i;
    if(n==0)
    {
        if(sum==0)
        return 1;
        return 0;
    }
    if(dp[n][sum]!=-1)
    return dp[n][sum];
    unsigned long long res=0;
    for(i=0;i<=9;i++)
    {
        if(sum-i>=0)
        res = (res+Count(n-1,sum-i))%MOD;
    }
    return dp[n][sum]=res;
}
unsigned long long countDigit(int n,int sum)
{
    int i;
    if(n==0)
    {
        if(sum==0)
        return 1;
        return 0;
    }
    unsigned long long res=0;
    for(i=1;i<=9;i++)
    {
        if(sum-i>=0)
        res = (res+Count(n-1,sum-i))%MOD;
    }
    return res;
}
int main() {
	//code
	int t,n,sum,i,j;
	scanf("%d",&t);
	while(t--)
	{
	    scanf("%d%d",&n,&sum);
	    for(i=0;i<=n;i++)
	    {
	        for(j=0;j<=sum;j++)
	            dp[i][j]=-1;
	    }
	    int d = countDigit(n,sum);
	    if(d==0)
	    d=-1;
	    printf("%d\n",d);
	}
	return 0;
}

 

Comments are closed.