• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Liczby ujemne (string) C++

Object Storage Arubacloud
0 głosów
1,827 wizyt
pytanie zadane 16 maja 2016 w C i C++ przez Corazzo Obywatel (1,040 p.)
edycja 16 maja 2016 przez Corazzo

Witam!
 

class Kalkulator
{
public:
   string liczba1;
   string liczba2;

   int dlugosc1;
   int dlugosc2;
   int liczb_wiecej;
 
  void wczytaj_liczby();
  void odejmowanie();

};

void Kalkulator::odejmowanie()
    {
        string wynik;
        int odejmowanie;

        for (int i=1; i<=liczb_wiecej; i++)
            {
                if (liczba1[dlugosc1-i] < liczba2[dlugosc2-i])
                    {
                        odejmowanie =
                        ((i<=dlugosc1) ? (liczba1[dlugosc1-i] - 48)+10 : 0)
                        -
                        ((i<=dlugosc2) ? (liczba2[dlugosc2-i] - 48) : 0) ;

                        liczba1[dlugosc1-i-1] -= 1;
                    }
                else
                    {

                    odejmowanie =
                    ((i<=dlugosc1) ? (liczba1[dlugosc1-i] - 48) : 0)
                    -
                    ((i<=dlugosc2) ? (liczba2[dlugosc2-i] - 48) : 0) ;

                    }

            wynik = char (( odejmowanie % 10 ) +48 ) + wynik;
            }
    cout<<"\nWynik odejmowania to: "<<wynik<<endl;
    }

O to mój kod na odejmowanie na stringach.

Wszystko działa, oprócz dwóch rzeczy:

1. Odejmowanie mniejszej liczby od większej. Jak uzyskać wynik na minusie?
2. Jak usunąć niepotrzebne zera na początku wyniku?

Pozdrawiam i z góry dziękuje za pomoc :)

2 odpowiedzi

+1 głos
odpowiedź 16 maja 2016 przez draghan VIP (106,230 p.)
wybrane 16 maja 2016 przez Corazzo
 
Najlepsza


1. Odejmowanie mniejszej liczby od większej. Jak uzyskać wynik na minusie?

Może to Cię zainspiruje:

12 - 30 = -18
30 - 12 = 18

2. Jak usunąć niepotrzebne zera na początku wyniku?

Przepisz wynik do innej zmiennej, z pominięciem początkowych zer. Możesz skorzystać ze zwykłej pętli lub z jakiegoś bardziej wyrafinowanego rozwiązania, np. użyć std::string::find_first_not_of() i std::string::substr().

komentarz 16 maja 2016 przez Corazzo Obywatel (1,040 p.)
Oj tak zainspirowało, że ja na to wcześniej nie wpadłem :-) A co do początkowych zer, to zrobiłem find_first_not_of() oraz size_t i działa! Dziękuje!
komentarz 16 maja 2016 przez Corazzo Obywatel (1,040 p.)
edycja 17 maja 2016 przez Corazzo
XXX
komentarz 16 maja 2016 przez draghan VIP (106,230 p.)
Dopiero późnym wieczorem zobaczę, o co chodzi. Pozdrawiam.
komentarz 16 maja 2016 przez Corazzo Obywatel (1,040 p.)
Podszedłem na spokojnie jeszcze raz do wszystkiego po paru godzinach przerwy i już wiem co zrobiłem źle - po prostu źle porównywałem liczby(string) w ifach. Problem załatwiony, działa już wszystko :-) Jeszcze raz dziękuje za pomoc!
komentarz 16 maja 2016 przez draghan VIP (106,230 p.)

A co ma funkcjonalnie robić poniższy fragment kodu?

if ((liczba1) >= (liczba2))

 

1
komentarz 16 maja 2016 przez draghan VIP (106,230 p.)
O, proszę. Czyli sam doszedłeś do rozwiązania. :) Super. :)
0 głosów
odpowiedź 16 maja 2016 przez Tomekku Bywalec (2,830 p.)

Polecam użyć atoi() wygląda to tak:

#include <iostream>
#include <stdlib.h>

using namespace std;

main()
{
	string a="-1";
	int liczba = atoi(a.c_str());
	cout<<liczba;
}

 

komentarz 16 maja 2016 przez Corazzo Obywatel (1,040 p.)
Nie za bardzo rozumiem, jak mam to użyć w swoim kodzie?

Podobne pytania

0 głosów
1 odpowiedź 284 wizyt
pytanie zadane 22 kwietnia 2021 w C i C++ przez Doge Gaduła (3,370 p.)
0 głosów
1 odpowiedź 6,166 wizyt
pytanie zadane 23 stycznia 2016 w C i C++ przez konrad99 Gaduła (4,090 p.)
+1 głos
4 odpowiedzi 5,010 wizyt

92,615 zapytań

141,465 odpowiedzi

319,779 komentarzy

61,997 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...