Mam taki problem:
Na wejście podawany jest zestaw składający się z dwóch liczb, mogą to być duże liczby, ale nie mogą składać się z więcej niż 1000 cyfr.
Na wyjście ma zostać podany wynik odejmowania i dodawania poszczególnych zestawów, wszystko w nowej linii. Np.
wejście
100 200
300 400
wyjscie
-100
300
-100
700
Kod mam taki
Niestety nie działa to za dobrze. Domyślam się, że błąd tkwi gdzieś w tych funkcjach z dodawaniem i odejmowaniem. Np użycie przeze mnie atof() nie było chyba dobrym rozwiązaniem, jest to tylko jedna z wielu prób, ale już mi się pomysły skończyły co tam jeszcze można zrobić.
Jak macie jakiś pomysł to będę wdzięczny.
Na wejście podawany jest zestaw składający się z dwóch liczb, mogą to być duże liczby, ale nie mogą składać się z więcej niż 1000 cyfr.
Na wyjście ma zostać podany wynik odejmowania i dodawania poszczególnych zestawów, wszystko w nowej linii. Np.
wejście
100 200
300 400
wyjscie
-100
300
-100
700
Kod mam taki
#include <stdio.h>
#include<string.h>
char dodawanie(char liczba1[],char liczba2[])
{
char wynik[1001];
int dlugosc=strlen(liczba1), p=0, w;
wynik[dlugosc]=0;
while ((dlugosc--)>=0)
{
w=(liczba1[dlugosc]-48)+(liczba2[dlugosc]-48)+p;
if(w>=10)
{
wynik[dlugosc]=(w-10)-48;
p=1;
}
else
{
wynik[dlugosc]=w-48;
p=0;
}
}
return atof(wynik);
}
char odejmowanie(char liczba1[],char liczba2[])
{
char wynik2[1001];
int dlugosc=strlen(liczba1), q=0, v;
wynik2[dlugosc]=0;
while ((dlugosc--)>=0)
{
v=(liczba1[dlugosc]-48)-(liczba2[dlugosc]-48)-q;
if(v < 0)
{
wynik2[dlugosc]=(v+10)-48;
q=1;
}
else
{
wynik2[dlugosc]=v-48;
q=0;
}
}
return atof(wynik2);
}
void zerowanie(char tab[], int ilosc)
{
char tabz[1001]="";
while(ilosc--) strcat(tabz,"0");
strcat(tabz,tab);
strcpy(tab,tabz);
}
int main () {
char liczba1[1001], liczba2[1001];
int dlugosc1, dlugosc2, suma, roznica;
while(scanf("%s %s", liczba1, liczba2)==2)
{
dlugosc1=strlen(liczba1);
dlugosc2=strlen(liczba2);
if(dlugosc1<dlugosc2) zerowanie(liczba1,dlugosc2-dlugosc1);
if(dlugosc2<dlugosc1) zerowanie(liczba2,dlugosc1-dlugosc2);
suma=dodawanie(liczba1,liczba2);
roznica=odejmowanie(liczba1,liczba2);
printf("%s\n%s\n", roznica, suma);
}
return 0;
}
Niestety nie działa to za dobrze. Domyślam się, że błąd tkwi gdzieś w tych funkcjach z dodawaniem i odejmowaniem. Np użycie przeze mnie atof() nie było chyba dobrym rozwiązaniem, jest to tylko jedna z wielu prób, ale już mi się pomysły skończyły co tam jeszcze można zrobić.
Jak macie jakiś pomysł to będę wdzięczny.