327
Cerința
Se dau două numere naturale S şi K. Să se afle cel mai mic număr natural A care are suma cifrelor egală cu S, precum şi restul împărţirii lui A la K.
Date de intrare
Fișierul de intrare numar9.in conține pe prima linie numerele naturale S şi K.
Date de ieșire
Fișierul de ieșire numar9.out va conține pe prima linie numărul A, iar pe a doua linie restul împărţirii lui A la K.
Restricții și precizări
1 ≤ S ≤ 20.000.0001 ≤ K ≤ 1.000.000- Pentru prima cerinţă se acordă
60p, iar pentru a doua40p - Pentru a primi punctajul pentru a doua cerinţă, în fişierul
numar9.outtrebuie să afişaţi două numere
Exemplu
numar9.in
25 13
numar9.out
799 6
Explicație
Cel mai mic număr natural care are suma cifrelor egală cu 25 este 799. Restul împărţirii lui 799 la 13 este 6.
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("numar9.in");
ofstream fout ("numar9.out");
int unsigned k,i,v[2200001];
int main()
{
long long unsigned s , x , r , a , b;
fin >> s >> k;
r = s % 9;
a = s / 9;
b = a / 6;
for (i = 1 ; i <= b ; i++) v[i]=999999;
for (i = b + 1 ; i <= b + a % 6 ; i++) v[i]=9;
if (r != 0 && s != 0) v[0] = r;
x = 0;
if (v[0] != 0)
for (i = 0 ; i <= b + a % 6 ; i++)
{
fout << v[i];
if (v[i] < 10) x = (x * 10 + v[i])% k;
else
{
while (v[i]!=0)
{
x = (x * 10 + v[i] % 10)% k;
v[i] /= 10;
}
}
}
else
for (i = 1 ; i <= b + a % 6 ; i++)
{
fout<<v[i];
if (v[i]<10) x = (x * 10 + v[i])% k;
else
{
while (v[i] != 0)
{
x = (x * 10 + v[i] % 10)% k;
v[i] /= 10;
}
}
}
fout << " " << x;
return 0;
}
Comentarii