Cod sursa(job #115263)

Utilizator mihai0110Bivol Mihai mihai0110 Data 16 decembrie 2007 11:54:07
Problema Operatii Scor 20
Compilator cpp Status done
Runda preONI 2008, Runda 2, Clasa a 9-a Marime 0.98 kb
#include<stdio.h>
#include<stdlib.h>
FILE *f=fopen("operatii.in","r");
FILE *g=fopen("operatii.out","w");
long n,x,y,i,j,max;
long v[1000000];
int nr[100],b[100];
void add(int A[], int 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;
}
int main(void)
{
fscanf(f,"%ld",&n);
for(i=1;i<=n;i++)
fscanf(f,"%ld",&v[i]);
for(i=1;i<=n;i++)
{
if(v[i])
	{
	if(v[i]>max)
		max=v[i];
	if(v[i]<v[i+1]&&v[i]<v[i-1])
		{
		x=max-v[i];
		max=0;
		for(j=b[0];j>=0;j--)
		b[j]=0;
		while(x)
			{
			b[0]++;
			b[b[0]]=x%10;
			x/=10;
			}
		add(nr,b);
		}
	}
else
	{
	x=max;
	max=0;
	for(j=b[0];j>=0;j--)
	b[j]=0;
		while(x)
			{
			b[0]++;
			b[b[0]]=x%10;
			x/=10;
			}
		add(nr,b);
	}
}
x=max;
	max=0;
	for(i=b[0];i>=0;i--)
	b[i]=0;
		while(x)
			{
			b[0]++;
			b[b[0]]=x%10;
			x/=10;
			}
		add(nr,b);
for(i=nr[0];i>=1;i--)
fprintf(g,"%d",nr[i]);
fprintf(g,"\n");

return 0;
}