Given an integer N, the task is to find out the count of numbers M that satisfy the condition M + sum(M) + sum (sum(M)) = N, where sum(M) denotes the sum of digits in M.
Input:
The first line of input contains an integer T denoting the number of test cases. Then T test cases follow. Each test case contains a number N as input.
Output:
For each test case, print the count of numbers in new line.
Constraints:
1<=T<=500
1<=N<=109
Example:
Input:
2
5
9
Output:
0
1
Explanation:
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
#include <stdio.h> #include <stdlib.h> int sum(int n) { int sum=0; while(n) { sum=sum+n%10; n=n/10; } return sum; } int main() { int num,i; scanf("%d",&num); int *Arr=(int *)malloc(sizeof(int)*num); int *Brr=(int *)malloc(sizeof(int)*num); for(i=0;i<num;i++) { scanf("%d",&Arr[i]); Brr[i]=0; } for(i=0;i<num;i++) { int j=0; for(j=0;j<Arr[i];j++) { if(j+sum(j)+sum(sum(j))==Arr[i]) Brr[i]++; } } for(i=0;i<num;i++) { printf("%d\n",Brr[i]); } return 0; }
看似完美的实现了要求,提交代码显示:
********************************************************************************************************************************
***********************************************问题解决************************************************************************
********************************************************************************************************************************
根据题意,我们知道1<=N<=109
sum(m)的范围是[ 1,81],其中m取999999999时候取得最大值。
sum(sum(m))的范围是[1,16] 其中sum(m)=79时候取得最大值。
故sum(m)+sum(sum(m))的范围是[2,95]
所以实现代码如下:
#include <bits/stdc++.h> using namespace std; int sum(int n) { int s=0; while(n) { s=s+n%10; n=n/10; } return s; } int main() { int num; cin>>num; while(num--) { int n,sum1=0,c=0; cin>>n; if(n<100) { for(int j=1;j<n;j++) { if(j+sum(j)+sum(sum(j))==n) c++; } } else { for(int j=n-95;j<n;j++) { if(j+sum(j)+sum(sum(j))==n) c++; } } cout<<c<<"\n"; } return 0; }
如有疑问,请留言。