TCDFZ - Chữ số tận cùng khác 0
Tác giả: khuc_tuan
Ngôn ngữ: C++
#include <stdio.h>
#include <string.h>
#define MAXN 1000
long a[MAXN], l;
void a_div_5(void)
{
int i, plus;
plus = 0;
for (i=0; i<l; i++) {
a[i] = a[i]*2+plus;
plus = a[i]/10;
a[i] = a[i]%10;
}
if (plus>0) a[l++] = plus;
l--;
for (i=0; i<l; i++) a[i] = a[i+1];
}
int main(void)
{
char buffer[MAXN];
long mod[20]={1,1,2,1,4,2,2,4,2,3,4,4,3,4,1,3,3,1,3,2};
int result, n, i, plus, j, one;
FILE *f, *g;
f = stdin;
g = stdout;
while ( fscanf(f, "%s", buffer) != EOF) {
l = strlen(buffer);
for (i=0; i<l; i++) a[i] = buffer[l-1-i] - '0';
one = l==1 && (a[0]==1 || a[0]==0);
result = 1;
while (l>0) {
if (l==1) result = result * mod[a[0]] % 5;
else result = result * mod[a[0] + 10*(a[1]%2) ] % 5;
a_div_5();
}
if (one || result%2==0) fprintf(g, "%d\n", result);
else fprintf(g, "%d\n", result+5);
}
return 0;
}