Cod sursa(job #1456041)

Utilizator rebecca0312Andrei Rebecca rebecca0312 Data 29 iunie 2015 18:26:47
Problema Cifre Scor 40
Compilator c Status done
Runda Arhiva de probleme Marime 1.59 kb
#include <stdio.h>
int main(){
    FILE *fin=fopen("cifre.in","r");
    FILE *fout=fopen("cifre.out","w");
    int a,b,c,k,nr1=0,nr2=0,cnr2,cnr1,p2=0,p=0,p5=0,i,ci,cf,aux,ok;
    fscanf(fin, "%d%d%d%d", &a, &b, &c, &k);
    for(i=a;i<=b;i++){
        ci=i;
        cf=0;
        while(ci){
            if(ci%10==c)
                cf++;
            ci/=10;
        }
        if(cf>=k)
            nr2++;
    }
    nr1=b-a+1;
    if(nr2%nr1!=0){
        fprintf(fout, "%d.", nr2/nr1);
        cnr2=nr2;
        cnr1=nr1;
        while(cnr1!=0){
            aux=cnr2%cnr1;
            cnr2=cnr1;
            cnr1=aux;
        }
        if(cnr2!=1){
            nr2/=cnr2;
            nr1/=cnr2;
        }
        cnr1=nr1;
        while(cnr1%5==0){
            cnr1/=5;
            p5++;
        }
        cnr1=nr1;
        while(cnr1%2==0){
            cnr1/=2;
            p2++;
        }
        if(p5>=p2)
            p=p5;
        else
            p=p2;
        nr2=nr2%nr1;
        i=0;
        while(nr2!=0 && p>0 && i<4){
            nr2=nr2*10;
            fprintf(fout, "%d", nr2/nr1);
            nr2=nr2%nr1;
            p--;
            i++;
        }
        cnr2=nr2;
        if((nr2*10)%nr1 && i<4){
            ok=1;
            while(i<4 && ok==1){
                fprintf(fout, "%d", (nr2*10)/nr1);
                nr2=(nr2*10)%nr1;
                if(nr2==0)
                    ok=0;
                i++;
            }
        }
    }
    else
        fprintf(fout, "%d", nr2/nr1);
    fclose(fin);
    fclose(fout);
    return 0;
}