diff options
-rw-r--r-- | mat/euler/15/NEDOKONCAN | 0 | ||||
-rw-r--r-- | mat/euler/16/Makefile | 2 | ||||
-rwxr-xr-x | mat/euler/16/a.out | bin | 0 -> 8600 bytes | |||
-rw-r--r-- | mat/euler/16/mnozi.c | 31 | ||||
-rw-r--r-- | mat/euler/16/prog.c | 30 |
5 files changed, 63 insertions, 0 deletions
diff --git a/mat/euler/15/NEDOKONCAN b/mat/euler/15/NEDOKONCAN new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/mat/euler/15/NEDOKONCAN diff --git a/mat/euler/16/Makefile b/mat/euler/16/Makefile new file mode 100644 index 0000000..8278251 --- /dev/null +++ b/mat/euler/16/Makefile @@ -0,0 +1,2 @@ +default: + gcc prog.c -pedantic -I. diff --git a/mat/euler/16/a.out b/mat/euler/16/a.out Binary files differnew file mode 100755 index 0000000..25772a9 --- /dev/null +++ b/mat/euler/16/a.out diff --git a/mat/euler/16/mnozi.c b/mat/euler/16/mnozi.c new file mode 100644 index 0000000..f90cdbd --- /dev/null +++ b/mat/euler/16/mnozi.c @@ -0,0 +1,31 @@ +#pragma once +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +int mnozi (unsigned long long int mnozi_s_tem, char * d, long int b) { + unsigned long long int carry = 0; // carry je pri množenju vedno pozitiven + unsigned long long int to = 0; + unsigned long long int za_napisati = 0; + for (b = b-1; b >= 0; b--) { + to = d[b] - '0'; + za_napisati = to * mnozi_s_tem; + za_napisati = za_napisati + carry; + carry = 0; + if (za_napisati > 9) { + za_napisati = za_napisati - 10; + carry++; + } + d[b] = za_napisati + '0'; + } + return 0; +} +#ifndef DISABLE_LIB_TESTS +int main (int argc, char ** argv) { + unsigned long long int m = 2; + char d[] = "0000000000000000000000000000000000000000000000000000456"; + int b = strlen(d); + mnozi(m, d, b); + fprintf(stdout, "test: %s\n", d); + return 0; +} +#endif diff --git a/mat/euler/16/prog.c b/mat/euler/16/prog.c new file mode 100644 index 0000000..5a2d7f3 --- /dev/null +++ b/mat/euler/16/prog.c @@ -0,0 +1,30 @@ +#include <stdio.h> +#include <stdlib.h> +#define DISABLE_LIB_TESTS +#include <mnozi.c> +#define MAX_SIRINA 80*(24-3) /* zapolnimo malo teminalsko okno */ +#define MAX_SIRINA_S "1680" /* = 80 * 21; nastavi tudi to za format stavek */ +int main (int argc, char ** argv) { + if (argc != 1+2) { + fprintf(stderr, "uporaba: %s <Številka> (^) <Številka>\nprimer za izračun 2^1000: %s 2 1000\n", argv[0], argv[0]); + return 1; + } + unsigned long long int n = strtoull(argv[1], NULL, 10); + unsigned long long int m = strtoull(argv[2], NULL, 10); + if (m == 0) { + fprintf(stderr, "KARKOLI NA NIČ JE ENA! (reci to računalniku)\n"); + return 2; + } + char * z = malloc(sizeof(char)*(MAX_SIRINA + 1)); // + 1 za \0 + unsigned int l = MAX_SIRINA; + unsigned long long int s = 0; // Seštevek števk + sprintf(z, "%0" MAX_SIRINA_S "llu", n); + z[MAX_SIRINA] = '\0'; + for (; m > 1; m--) + // fprintf(stderr, "\rpreostane še %llu operacij ...", m); + mnozi (n, z, l); + for (m = 0; m < MAX_SIRINA; m++) // sicer je m itak že 0 ampak okej + s = s + (z[m] - '0'); + fprintf(stdout, "\rkonec računanja. seštevek števk v rezultatu je %llu, število je\n%s\n", s, z); + return 0; +} |