Informatică, întrebare adresată de Saharra, 9 ani în urmă

Să se scrie o funcţie care primeşte ca argumente două numere naturale a şi b şi returnează numărul de elemente din intervalul [a,b] care au cifra de control egală cu a.
Cifra de control a unui număr se obţine efectuând suma cifrelor sale, apoi suma cifrelor acestei sume etc. până se obţine o sumă formată dintr-o singură cifră. De exemplu, cifra de control a numărului 645 este 6. (6+4+5=15, 1+5=6)
Restricţii şi precizări
•numele funcţiei va fi sum_cifra_control
•funcţia va avea doi parametri, a şi b, în această ordine
•1 ≤ a ≤ 9
•a < b ≤ 10^7
Exemplu

sum_cifra_control(2, 100) = 11

Important

Soluţia propusă va conţine doar definiţia funcţiei cerute. Prezenţa în soluţie a altor instrucţiuni poate duce erori de compilare sau de execuţie care vor avea ca efect depunctarea soluţiei.

NEAPARAT C++


Razzvy: Cifra de control a unui numar se poate afla cu restul impartirii la 9 al acelui numar
Saharra: Am scris codul... dar iau 90 p, nu 100 :))
Saharra: int sum_cifra_control(int a, int b)
{int s, i, c=0, p, j;
for(i=a; i<=b; i++)
{
j=i;
while(j>9)
{
s=0;
while(j)
{
p=j%10;
s=s+p;
j=j/10;
}
j=s;
}if(j==a)
c++;
}
return c;
}
Razzvy: Si tu vreai doar un cod de 100 sau vrei sa-l corectezi pe celalalt?
Razzvy: La ce iti pica ultimul test? LA limita de timp depasita, sau raspuns gresit?
Razzvy: *vrei
Razzvy: Ti-am spus. Nu e nevoie sa treci prin toate acele etape pentru a calcula cifra de control. Pentru a o calcula mai rapid, faci direct restul impartirii la 9, iar daca este 0, atunci cifra de control este 9. Asta deoarece restul impartirii la 9 se pastreaza pentru suma cifrelor.
Saharra: imi da ca depasec limita de timp... nu am vreo preferinta, poti sa corectezi Solutia mea sau sa propui tu una. Iti multumesc mult!

Răspunsuri la întrebare

Răspuns de Razzvy
14
Ai solutia in atasament. Acolo este tot programul.
Dupa ce intelegi solutia aia, te poti uita pe asta :)

int sum_cifra_control(int a, int b) { return (b + 9 - a) / 9;}
Anexe:

Saharra: Iti multumesc mult de tot! E perfect! :)
Razzvy: Cu placere!
Alte întrebări interesante