Hey. Mam problem. Program ma wczytać długości dwóch liczb (max 255 cyfr), następnie wylosować dwie liczby o tych długościach, wypisać je na ekran, następnie dodać i wypisać wynik.
Tutaj moje wypociny. Funkcja "sum" jest skopana, ale nie mam pomysłu jak to zrobić.
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
unsigned short int bigger(unsigned short int x, unsigned short int y)
{
x > y ? y = x : x = y;
return x;
}
void write(unsigned short int numberLenght, char * number)
{
for (int i = 0; i < numberLenght; ++i)
{
printf("%c", *(number + i));
}
}
void random(unsigned short int numberLength, char * &number)
{
srand(time(NULL));
for (int i = 0; i < numberLength; ++i)
{
*(number + i) = (rand() % 10) + 48;
}
*number = (rand() % 9) + 49; // Gdyby pierwsza wylosowana cyfra liczby okazała się być zerem.
}
void sum(unsigned short int x, unsigned short int y, char * firstNumber, char * secondNumber, char* &result)
{
unsigned short int lenght = bigger (x, y), rest = 0, addition = 0;
while (lenght >= 0)
{
addition = (*(firstNumber + x - 1) - 48) + (*(secondNumber + y - 1) - 48) + rest;
if (addition >= 10)
{
*(result + lenght) = addition - 10 + 48;
rest = 1;
}
else
{
*(result + lenght) = addition + 48;
rest = 0;
}
lenght--;
}
}
int main()
{
unsigned short int y = 0, x = 0;
printf("%s", "Podaj dlugosc pierwszej liczby: ");
scanf("%d", &x);
printf("%s", "Podaj dlugosc drugiej liczby: ");
scanf("%d", &y);
if (x < 256 && y < 256)
{
char * firstNumber = (char*) malloc(x * sizeof(*firstNumber));
char * secondNumber = (char*) malloc(y * sizeof(*secondNumber));
char * result = (char*) malloc((bigger(x, y) + 1) * sizeof(*secondNumber));
random(x, firstNumber);
random(y, secondNumber);
printf("%s", "Pierwsza liczba to: ");
write(x, firstNumber);
printf("\n");
printf("%s", "Druga liczba to: ");
write(y, secondNumber);
printf("\n\n");
write(x, firstNumber);
printf("%s", " + ");
write(y, secondNumber);
printf("%s", " = ");
write(bigger(x, y), result);
free(firstNumber);
free(secondNumber);
}
else
{
printf("s", "Podano zbyt duze liczby.");
}
return 0;
}