1815: easy problem
Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 173 Solved: 87
SubmitStatusWeb Board
Description
给你一个数字N,N的范围是1~1000000,求一个最小的正整数M,这个数字M的各个位的数字加上它本身之和恰好为N。当然,如果没有解,输出0。
Input
输入数据由多组数据组成,每行由一个数字N组成(1<=N<=1000000)。
Output
对于每组数据,输出仅一行包含一个整数M。如果对于每个N,存在最小的M,则输出这个最小值。如果不存在这个最小的M,则输出0。
Sample Input
216
121
2005
Sample Output
198
0
1979
思路:如果N是一个K位数,那么直接从N-K*9开始枚举到N,不会超时也不会漏判
代码
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#include<math.h>
#include<queue>
using namespace std;
bool Judge(int i,int N)
{
int num[10];
int point=0;
int flag_i=i;
while(flag_i)
{
num[point++]=flag_i%10;
flag_i/=10;
}
for(int j=0; j<point; j++)
i+=num[j];
if(i==N)
return true;
return false;
}
void Solve(int N,int num)
{
for(int i=N-9*num; i<N; i++)
if(Judge(i,N))
{
printf("%d\n",i);
return;
}
printf("0\n");
return;
}
int main()
{
int N;
while(~scanf("%d",&N))
{
int flag_N=N;//我想知道N是几位数
int num=0;
while(flag_N)
{
num++;
flag_N/=10;
}
Solve(N,num);
}
return 0;
}