Pagini recente » Cod sursa (job #2474635) | Cod sursa (job #1361547) | Cod sursa (job #1937831) | Cod sursa (job #3301498)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#define MAX_SZ 101
int mod_2(char *s)
{
return (int)s[strlen(s) - 1] % 2;
}
int mod_4(char *s)
{
int l = strlen(s);
if (l == 1) {
return (s[l - 1] - '0') % 4;
}
int a = (s[l - 2] - '0') * 10 + (s[l - 1] - '0');
return a % 4;
}
int find_last_digit(char *s, int b)
{
if (b == 0 || b == 1 || b == 5 || b == 6) {
return b;
}
if (b == 2 || b == 3 || b == 7 || b == 8) {
int r = mod_4(s);
if (r == 0) {
r = 4;
}
return (int)pow(b, r) % 10;
}
if (b == 4 || b == 9) {
int r = mod_2(s);
if (r == 0) {
r = 2;
}
return (int)pow(b, r) % 10;
}
return 0;
}
int sum_of_twenty(void)
{
int nr = 0;
for (int i = 0; i <= 19; i++) {
if (i < 10) {
char *s = (char *)malloc(2);
s[1] = '\0';
s[0] = i + '0';
nr += find_last_digit(s, i);
free(s);
} else {
char *s = (char *)malloc(3);
s[0] = '1';
s[1] = i % 10 + '0';
s[2] = '\0';
nr += find_last_digit(s, i);
free(s);
}
}
return nr;
}
int sum(char *s)
{
int l = strlen(s), u, nr = 0;
if (l == 1) {
u = s[l - 1] - '0';
}
if (l > 1) {
u = (s[l - 2] - '0') * 10 + (s[l - 1] - '0');
}
int r = u;
u = u % 10;
for (int i = 0; i <= u; i++) {
if (i < 10) {
char *c = (char *)malloc(2);
c[1] = '\0';
c[0] = i + '0';
nr += find_last_digit(c, i);
free(c);
} else {
char *c = (char *)malloc(3);
c[0] = '1';
c[1] = i % 10 + '0';
c[2] = '\0';
nr += find_last_digit(c, i);
free(c);
}
}
if (l == 1 || (l == 2 && s[0] == '1')) {
return nr % 10;
}
return (nr + (r / 20) * sum_of_twenty()) % 10;
}
int main()
{
FILE *file_in = fopen("cifra.in", "r");
FILE *file_out = fopen("cifra.out", "w");
int t;
fscanf(file_in, "%d", &t);
for (int i = 0; i < t; i++) {
char *s = (char *)calloc(MAX_SZ, 1);
fscanf(file_in, "%s", s);
fprintf(file_out, "%d\n", sum(s));
free(s);
}
fclose(file_in);
fclose(file_out);
}