O objetivo é fazer uma calculadora de duas opções (+ e *) só que do jeito que a gente faria se fosse no papel, daí quando chega na parte destacada do código, o resultado é zerado e não sei porquê:
for(int i = 0; i <tam2; i++){// multiplicação do segundo numero
if(inutil2 == 0){
n = num2[tam2 - (i+1)];
}
else{
n = resultado[tamanhor -i];
printf ("tamanhor :%d\n",resultado[tamanhor -(i)]);
}
n = n*2;
n = n + sobra;
código completo:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include <time.h>
int *soma (int *num1, int *num2, int tam, int tam2,int *tamSoma)
{
int *sum;
int acima10 = 0;
if (tam >= tam2){
*tamSoma = tam + 10;
sum = malloc ((*tamSoma) * sizeof (int));
for (int i = 0; i < tam + 10; i++){
*(sum + i) = 0;
}
for (int i = 0; i < tam+1; i++){
*(sum + (*tamSoma - i)) = num1[tam - i] + num2[tam2 - i] + acima10;
printf("soma: %d\n",*(sum + (tam2 + 10 - i)) );
printf("acima10: %d\n", acima10);
if (*(sum + (tam2 + 10 - i)) >= 10){
printf("aquuiiii\n");
*(sum + (tam2 + 10 - i)) -=10;
acima10 = 1;
}
else{
acima10 = 0;
}
}
}
if (tam < tam2){
*tamSoma = tam2+10;
sum = malloc ((*tamSoma) * sizeof (int));
for (int i = 0; i < tam2 + 10; i++){
*(sum + i) = 0;
}
for (int i = 0; i < tam+1; i++){
*(sum + (tam2 + 10 - i)) = num1[tam - i] + num2[tam2 - i] + acima10;
printf("soma:%d\n",*(sum + (tam2 + 10 - i)) );
printf("acima10: %d\n", acima10);
if (*(sum + (tam2 + 10 - i)) >= 10){
printf("if");
*(sum + (tam2 + 10 - i)) -=10;
acima10 = 1;
}
else{
acima10 = 0;
}
}
}
return sum;
}
int* multi(int* num1,int* num2,int tam1,int tam2){
int n = 0, sobra = 0, z, tamanhor = tam2 + 10, inutil = 0, verdade = 1, inutil2 =0;
int* resultado;
int* respostaf;
resultado = malloc(tam2 + 10);
respostaf = malloc(tam2 + tam1);
for (int i = 0; i < tam1 + tam2; i++){
*(respostaf + i) = 0;// lista da resposta final
}
for (int i = 0; i < tam1 + tamanhor; i++){
*(resultado + i) = 0;// lista da resposta final
}
while(verdade){
for (int i = 0; i < tam1; i++){
printf ("%d", num1[i]);
}
printf ("\n");
for (int i = 0; i < tam2; i++){
printf ("%d", num2[i]);
}
printf ("\n");//print dos numeros que começa tudo
for(int i= 0; i <tam1; i++){// divisao do numero
n = num1[i];
z = n%2;
n = n/2;
if(z != 0){
n = n+sobra;
sobra = 5;
}
else{
n = n +sobra;
sobra = 0;
}
*(num1+i)= n;
}
sobra = 0;
printf ("tam2 ;%d\n", tam2);
for(int i = 0; i <tam2; i++){// multiplicação do segundo numero
if(inutil2 == 0){
n = num2[tam2 - (i+1)];
}
else{
n = resultado[tamanhor -i];
printf ("tamanhor :%d\n",resultado[tamanhor -(i)]);
}
n = n*2;
n = n + sobra;
if(n >= 10 && i+1<tam2){
sobra = n/10;
n = n-(sobra*10);
}
else{
sobra = 0;
}
resultado[tamanhor - i-1] = n;// resposta da multiplicação
printf ("resultado ; %d\n", resultado[tamanhor - i-1]);
}
inutil2 ++;
if (num1[tam1]%2 !=0){
respostaf = soma(respostaf, resultado, tam1+tam2, tamanhor,&inutil);
printf ("resultado??? ; %d\n", resultado[tamanhor - 1]);
}
for (int i = 0; i < tamanhor; i++){
printf ("%d", resultado[i]);
}
printf("\n");
for(int i =0; i<tam1; i++){
if(i+1 < tam1){
if(num1[i]!=0){
break;
}
}
else{
if(num1[i] == 1){
verdade =0;
}
}
}
}
return 0;
}
int *
entrada (int GeraVector, int *tam)
{
char NumEnt[255];
int *Number;
int i, Entidade;
if (GeraVector == 1)
{
scanf ("%s", NumEnt);
Number = malloc (strlen (NumEnt) * sizeof (int));
*tam = strlen (NumEnt);
for (i = 0; i < strlen (NumEnt) * sizeof (char); i++)
{
*(Number + i) = ((int) (NumEnt[i]) - 48);
}
}
if (GeraVector == 0)
{
scanf ("%d", &Entidade);
*tam = Entidade;
Number = malloc (Entidade * sizeof (int));
srand (time (NULL));
for (i = 0; i < Entidade; i++)
{
*(Number + i) = rand () % 10;
}
}
return Number;
}
int main (){
int *Inteiro;
int *Inteiro2;
int *adi;
int i, j, Choice, tam, tam2, tamSoma;
printf ("VOCE QUER QUE O PC CRIE UO QUER CRIAR VC? (0/1)");
scanf ("%d", &Choice);
Inteiro = entrada (Choice, &tam);
Inteiro2 = entrada (Choice, &tam2);
printf("soma ou multiplicação(0/1)?");
scanf("%d", &Choice);
if(Choice == 0){
adi = soma (Inteiro, Inteiro2, tam, tam2, &tamSoma);
}
if(Choice == 1){
multi(Inteiro, Inteiro2, tam, tam2);
}
/*for (i = 0; i < tam; i++)
{
printf ("%d", Inteiro[i]);
}
printf ("\n");
for (i = 0; i < tam2; i++)
{
printf ("%d", Inteiro2[i]);
}
printf ("\n");*/
while (1){
if(adi[j]==0){
j++;
}
else{
break;
}
}
for (i = j; i < tamSoma; i++)
{
printf ("%d", adi[i]);
}
return 0;
}