Contest 2050 and Codeforces Round #718 (Div. 1 + Div. 2)
A. Sum of 2050
比赛地址:https://codeforces.com/contest/1517/problem/A
题目大意;定义一种数"2050数"这种数等于2050*10^k,k可以取任何大于等于0的数,现给一个数问这个数能不能由若干个"2050数"组成,如果可以就输出所需最少的"2050数",否则输出-1
思路:如果一个数可以由"2050数"组成那么一定是2050的整数倍,否则一定不行,那么如果可以最少多少个2050就可以了呢?既然是2050的倍数那我们可以把它10^k 倍的数目求出来,进行累加就行了,比如 25308639900/2050=12345678将各个位数上的数字相加即可。
代码:
#include <iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<cstdlib>
typedef long long ll;
using namespace std;
int main()
{
ll t;
cin>>t;
while(t--)
{
ll n,ans=0,x;
cin>>n;
x=n/2050;
while(x)
{
ans=ans+x%10;
x=x/10;
}
if(ans==0||n%2050)
cout<<-1<<endl;
else cout<<ans<<endl;
}
return 0;
}