http://www.guj.com.br/t/calculadora-infinita/330513
Estava com esse problema,uso CODEBLOCKS por causa da facul,evolui um pouco e fiz isso:(foi mal,o site não formatou muito bem,eu acho…)
crie um txt com dois numeros enormes e guarde na mesma pasta do projeto e veja a minha nota baixa acontecer,rsrs,alguém poderia me explicar o que é que está de errado???
#include <stdio.h>
typedef struct {
double *digito;
}numero;
void soma(numero *bla,numero *ble,int i,int j){
numero blu;
int g=0,c=1,t,z;
t=i;z=j;
blu.digito=calloc(1,sizeof(double));
if(i<j){
while(i>0){
blu.digito = realloc(blu.digito,(++c)*sizeof(double));
//blu.digito[g]=NULL;
blu.digito[g]=bla.digito[i]+ble.digito[j];
if(blu.digito[g]>9){
blu.digito[g]=blu.digito[g]-10;
ble.digito[j–]=1+ble.digito[j–];
j++;
}
g++;
i–;j–;
}
while(j>0){
blu.digito = realloc(blu.digito,(++c)*sizeof(double));
//blu.digito[g]=NULL;
blu.digito[g]=0+ble.digito[j];
if(blu.digito[g]>9){
blu.digito[g]=blu.digito[g]-10;
ble.digito[j–]=1+ble.digito[j–];
j++;
}
g++;
j–;
}
printf(“RESULTADO: \n”);
while(g>0){
printf("%dXXX",blu.digito[g]);
g–;
}
}else{
while(j>0){
blu.digito = realloc(blu.digito,(++c)*sizeof(double));
//blu.digito[g]=NULL;
blu.digito[g]=bla.digito[i]+ble.digito[j];
if(blu.digito[g]>9){
blu.digito[g]=blu.digito[g]-10;
bla.digito[i–]=1+bla.digito[i–];
i++;
}
g++;
i–;j–;
}
while(i>0){
blu.digito = realloc(blu.digito,(++c)*sizeof(double));
//blu.digito[g]=NULL;
blu.digito[g]=0+bla.digito[i];
if(blu.digito[g]>9){
blu.digito[g]=blu.digito[g]-10;
bla.digito[i–]=1+bla.digito[i–];
i++;
}
g++;
i–;
}
printf("\n%d numeros\n",g);
printf(“RESULTADO: \n”);
while(g>0){
printf("%dxxx",blu.digito[g]);
g–;
}
}
}
int menu(numero *bla,numero *ble,int i,int j){
int opcao;
printf("\n\nCALCULADORA ‘INFINITA’\n");
printf(“OPCOES:(digite numero correspondente)\n”);
printf(“1-SOMA\n”);
printf(“2-SUBTRAÇÃO\n”);
printf(“3-MULTIPLICAÇÃO\n”);
printf(“4-DIVISÃO\n”);
printf(“5-RESTO\n”);
printf(“6-SAIR\n”);
scanf("%d",&opcao);
if((opcao<0)||(opcao>6)){
printf(“Opção inválida”);
//menu();
}
switch(opcao){
case 1:
soma(bla,ble,i,j);
break;
case 2:
//subtracao();
break;
case 3:
//multiplicacao();
break;
case 4:
//divisao();
break;
case 5:
//resto();
break;
}
}
double conversor(char cho){
numero blas;int ii=0;
if(cho==‘0’){
blas.digito[ii]=0;
}else if(cho==‘1’){
blas.digito[ii]=1;
}else if(cho==‘2’){
blas.digito[ii]=2;
}else if(cho==‘3’){
blas.digito[ii]=3;
}else if(cho==‘4’){
blas.digito[ii]=4;
}else if(cho==‘5’){
blas.digito[ii]=5;
}else if(cho==‘6’){
blas.digito[ii]=6;
}else if(cho==‘7’){
blas.digito[ii]=7;
}else if(cho==‘8’){
blas.digito[ii]=8;
}else if(cho==‘9’){
blas.digito[ii]=9;
}else{
printf(“deu merda”);
}
return blas.digito[ii];
}
int main(void)
{
char url[]=“teste.txt”;
char ch;
FILE *arq;
numero bla,ble;
int i=0,j=0,cont=0,contt=0,aux=0,auxx=0;
bla.digito=calloc(1,sizeof(double));
ble.digito=calloc(1,sizeof(double));
arq = fopen(url, "r"); if(arq == NULL){ printf("Erro, nao foi possivel abrir o arquivo\n"); }else{ while( (ch=fgetc(arq))!= EOF ){ if((ch=='\n')||(ch=='\r')){ break; } putchar(ch); bla.digito = realloc(bla.digito,(++cont)*sizeof(double)); bla.digito[i]=conversor(ch); aux++; } printf("\n%d numeros\n",aux); printf("\n\n"); while( (ch=fgetc(arq))!= EOF ){ putchar(ch); ble.digito = realloc(ble.digito,(++contt)*sizeof(double)); ble.digito[j]=conversor(ch); auxx++; } printf("\n%d numeros\n",auxx); } fclose(arq); menu(bla,ble,aux,auxx); return 0;
}