cyfra[10] = (pesel % 10)*1;
cyfra[9] = ((pesel/10) % 10)*1;
cyfra[8] = ((pesel/100) % 10)*3;
cyfra[7] = ((pesel/100) % 10)*9;
cyfra[6] = ((pesel/1000) % 10)*7;
cyfra[5] = ((pesel/10000) % 10)*3;
cyfra[4] = ((pesel/100000) % 10)*1;
- Drugą liczbę trzeba przemnożyć przez 3, a trzecią przez 1.
- Zgubiłeś jedno zero w kolejnych przypadkach zaczynając od cyfra[7]
- Gdy masz kilka zagnieżdzonych pętli ich iteracje powinny mieć różne nazwy. Inaczej nie wiesz której używasz (no chyba, że wiesz :D).
- Zmienna suma powinna być zerowana przy każdej iteracji pętli.
Poprawny kod z opisem zmian:
#include <iostream>
using namespace std;
int main(int argc, const char * argv[])
{
long int pesel;
long int cyfra[11];
int suma = 0;
int k;
cin >> k;
for (int i = 0; i<k; i++)
{
cin >> pesel;
cyfra[10] = (pesel % 10) * 1;
cyfra[9] = ((pesel / 10) % 10) * 3; // tu było 1
cyfra[8] = ((pesel / 100) % 10) * 1; // tu było 3
cyfra[7] = ((pesel / 1000) % 10) * 9;
cyfra[6] = ((pesel / 10000) % 10) * 7;
cyfra[5] = ((pesel / 100000) % 10) * 3;
cyfra[4] = ((pesel / 1000000) % 10) * 1;
cyfra[3] = ((pesel / 10000000) % 10) * 9;
cyfra[2] = ((pesel / 100000000) % 10) * 7;
cyfra[1] = ((pesel / 1000000000) % 10) * 3;
cyfra[0] = ((pesel / 10000000000) % 10) * 1; // dodane zera
for (int j = 0; j<11; j++) // i zamienione na j
{
suma += cyfra[j];
}
/* Tu uprościłem: */
if (suma % 10 == 0)
cout << 'D' << endl;
else
cout << 'N' << endl;
suma = 0; // Zerowanie sumy przy każdej iteracji pętli
}
}
PS. Mógłbyś korzystać z tablicy żeby zrobić to zadanie trochę krócej i lepiej.