Pagini recente » Cod sursa (job #344561) | Cod sursa (job #2008922) | Cod sursa (job #1177438) | Cod sursa (job #148083) | Cod sursa (job #67811)
Cod sursa(job #67811)
#include <stdio.h>
#include <string.h>
typedef int NrMare[5000];
NrMare n, n1, aux, p, p2;
void sum(NrMare A, NrMare B)
{
int i, t = 0;
for (i=1; i<=A[0] || i<=B[0] || t; i++, t/=10)
A[i] = (t += A[i] + B[i]) % 10;
A[0] = i - 1;
}
void citire(){
int i;
char s[5000];
FILE *f=fopen ("sarpe.in", "r");
fscanf (f, "%s\n", &s);
fclose(f);
n[0]=strlen(s);
for (i=n[0]; i>=1; --i) n[n[0]-i+1]=s[i-1]-'0';
}
void dif (NrMare n, NrMare unu, NrMare n1) {
int i, t=0;
for (i=1; i<=n[0]; ++i) {
n1[i]=n[i]-unu[i]+t;
if (n1[i]<0)
n1[i]+=10, t=-1;
else t=0;
}
i--;
while (i && !n1[i]) i--;
n1[0]=i;
}
void produs (NrMare n, NrMare n1, NrMare p) {
int i, j, t, cif;
for (i=1; i<=n1[0]; i++){
for (t=0, j=1; j<=n[0]; ++j){
cif=p[i+j-1]+n[j]*n1[i]+t;
p[i+j-1]=cif%10;
t=cif/10;
}
if (t) p[i+j-1]=t;
}
p[0]=n[0]+n1[0]-1;
if (p[p[0]+1]) ++p[0];
}
int main() {
int i;
citire();
FILE *g=fopen ("sarpe.out", "w");
if (n[0]==1 && n[1]==1)
fprintf (g, "2\n");
else {
aux[0]=1, aux[1]=1;
dif (n, aux, n1); // n-1
produs (n, n1, p); // n*(n-1)
aux[0]=1; aux[1]=2;
produs (p, aux, p2); //2*n*(n-1)
aux[0]=1; aux[1]=4;
sum (p2, aux); // 2*n*(n-1)+4
for (i=p2[0]; i>=1; --i)
fprintf (g, "%d", p2[i]);
fprintf (g, "\n");
}
fclose(g);
return 0;
}