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)
Am reusit sa fac urmatorul algoritm:
int sum_cifra_control(int a,int b)
{
int n,s,nr,numar;
s=0;
nr=0;
numar=0;
if(n>=a && n<=b)
while(n!=0)
{
s=s+n%10;
n=n/10;
}
while(s!=0)
{nr=nr+s%10;
s=s/10;}
if (nr==a)
numar++;
return nr;
}
Nu imi pot da seama ce este gresit la el.
Problema c++
Moderators: Moderatori ajutatori, Moderatori
- iLuSiOn
- Membru, skill +2
- Posts: 881
- Joined: 06 May 2011, 17:05
- Detinator Steam: Da
- Has thanked: 1 time
- Been thanked: 7 times
- Contact:
Code: Select all
#include <iostream.h>
int functie (int a, int b)
{
int i, nr, n, s;
nr = 0;
for (i = a; i <= b; i++)
{
n = i;
s = 0;
while (n > 0)
{
s = s + n % 10;
n = n / 10;
}
while (s > 9)
{
n = s;
s = 0;
while (n > 0)
{
s = s + n % 10;
n = n / 10;
}
}
if (s == a)
nr ++;
}
return nr;
}
int main ()
{
int a, b;
cin >> a >> b;
cout << functie(a, b);
}
intre 2 si 1000 mi-a afisat 111
EDIT: un mic comentariu asupra codului tau:
Code: Select all
int sum_cifra_control(int a,int b)
{
int n,s,nr,numar;
s=0;
nr=0;
numar=0;
if(n>=a && n<=b) // tu ai declarat int n si el nu ia nicio valoarea => nu intra in if.
while(n!=0) // recomand n > 0
{
s=s+n%10;
n=n/10;
}
while(s!=0)
{nr=nr+s%10;
s=s/10;}
if (nr==a)
numar++;
return nr;
}