C: Aritmetika stringova

Teme vezane za console/GUI programiranje u C/C++ jeziku
2 post(ov)a • Stranica: 1/1.

C: Aritmetika stringova

PostPostao/la displayerror » 13 sij 2016, 12:14

Napisati program (bez upotrebe GMP biblioteke - ) koji vrši aritmetičke operacije nad velikim pozitivnim cijelim brojevima (sabiranje, oduzimanje, množenje i dijeljenje). Maksimalan broj cifara u jednom broju je 100.
Veliki broj je broj (u ovom slučaju pozitivan) koji izlazi iz opsega svih standardnih tipova podataka (long long,...), pa se zato reprezentuje kao string.
VB može da se reprezentuje kao struktura koju čine polja niz_cifara i broj_cifara.
Zatim omogućiti inkrementovanje i dekrementovanje jednog stringa (pozitivnog cijelog broja), kao i pronalaženje najmanjeg i najvećeg u nizu od n stringova.

Zanima me kako biste vi uradili inkrementovanje, dekrementovanje i poredjenje.

Evo sabiranja:
cpp code
#include<stdio.h>
#define MAX 100//maks. broj cifara

typedef struct
{
int niz[MAX];
}VB;

void ucitajVB(VB *broj);//ucitavanje jednog VB
void sabiranje2VB(VB a,VB b,VB *rezultat);//sabiranje 2 VB
void ispisRezultat(VB *broj);//ispis rezultata sabiranja

void ucitajVB(VB *broj)
{
int i,cifra=0;
char ch[MAX+1];
scanf("%s",ch);//ucitavanje stringa

while(ch[cifra])//nalazenje broja cifara
cifra++;

for(i=0;i < MAX;i++)
{
cifra--;
if(cifra >= 0)
broj->niz[i]=ch[cifra]-'0';//prevodjenje int u char
else
broj->niz[i]=0;
}
}

void sabiranje2VB(VB a,VB b,VB *rezultat)
{
int ostatak=0;
int i,temp;
for(i=0;i < MAX;i++)
{
temp=a.niz[i]+b.niz[i]+ostatak;//suma
rezultat->niz[i]=temp % 10;//cifra koja se upisuje u koraku sabiranja
ostatak=temp / 10;//smjestanje ostatka
}
}

void ispisRezultat(VB *broj)
{
int i;

for(i=MAX-1;broj->niz[i]==0;i--);//preskociti vodece nule

for(;i>=0;i--)
printf("%d",broj->niz[i]);
}

int main()
{
VB x,y,z;
printf("Unijeti dva pozitivna cijela broja: \n");
ucitajVB(&x);
ucitajVB(&y);
printf("Rezultat sabiranja: ");
sabiranje2VB(x,y,&z);
ispisRezultat(&z);
return 0;
}

Re: C: Aritmetika stringova

PostPostao/la gagiD » 13 sij 2016, 13:49

Inkrement:
Ako je zadnja cifra razlicita od 9, samo je povacaj za 1 inace povecaj predzadnju a zadnju postavi na 0;

Dekrement:
Ako je zadnja cifra razlicita od 0, smanji je za 1, inace smanji predzadnju a zadnju postavi na 9;

Poredenja:
Ako su razlicite duzine vrati duzi(veci);
Ako su iste duzine nesto ovako:
c code
for (int i = 0; i < strlen(str1); ++i){
if (str1[i] > str2[i])
printf("str1 je veci\n");
else if (str2[i] > str1[i])
printf("str2 je veci\n");
}
printf("isti su\n");


Inace za cifre ti je dovoljan char, int je prevelik.


2 post(ov)a • Stranica: 1/1.

Na mreži

Trenutno korisnika/ca: / i 1 gost.