Nie lepiej napisać to czytelniej?
#include <iostream>
bool is_correct_NIP(const std::string& nip_str) {
unsigned sum{};
for(const auto& weight: {1, 3, 7, 9, 1, 3, 7, 9, 1, 3, 1}) {
// To pozostawiam Tobie :)
}
return (sum > 0) && (sum % 10 == 0);
}
int main() {
unsigned short test_counter;
std::string nip_str;
std::cin >> test_counter;
while(test_counter--) {
std::cin >> nip_str;
std::cout << (is_correct_NIP(nip_str) ? 'D' : 'N') << '\n';
}
}
Można to optymalizować, tylko po co? I tak największe obciążenie wprowadzają operacje I/O a nie obliczenia.