Problém s vysokými čísly při převodech číselných soustav – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Problém s vysokými čísly při převodech číselných soustav – C / C++ – Fórum – Programujte.comProblém s vysokými čísly při převodech číselných soustav – C / C++ – Fórum – Programujte.com

 

Beb_42
~ Anonymní uživatel
3 příspěvky
27. 5. 2009   #1
-
0
-

Zdravím, chtěl bych se zeptat, jestli někdo neví, proč mi následující kód při převodech vysokých čísel dělá chyby. Například když převádím z desítkové do desítkové soustavy číslo 123456789, tak mi vyjde 123456787. Předem díky



# include <iostream>
# include "math.h"
using namespace std;

int main()
{

int x;
int dva[10000];
int tri[10000];
int i=0;
int cislo;
int cislow;
int w;

cout<<"Zadejte z jake soustavy\n";
cin>>w;
cout<<endl;

cout<<"Zadejte cislo\n";
cin>>cislow;
cout<<endl;

cout<<"Zadejte do jake soustavy\n";
cin>>x;
cout<<endl;

while (cislow!=0)
{
dva[i]=cislow%10;
cislow/=10;
i++;
}
cislo=0;
i--;


while (i!=-1){
cislo+=dva[i]*(pow(w,i));
i--;
}

i=0;

while (cislo!=0)
{
tri[i]=cislo%x;
cislo/=x;
i++;
}

i--;

cout<<"vysledek je\n";

while (i!=-1){
cout<<tri[i];
i--;
}

cout<<endl;
cout<<endl;
system ("pause");
return 0;
}

Nahlásit jako SPAM
IP: 88.146.167.–
Mega.Lama0
Stálý člen
27. 5. 2009   #2
-
0
-

používaj aj iné typy než int:
unsigned int,long int,signed long int atď. ;)

Nahlásit jako SPAM
IP: 85.135.242.–
http://www.youtube.com/watch?v=j_tWGyCK6Ds ...kto by veril,že je to otcov bratranec z druhého kolena?...
Quiark0
Věrný člen
27. 5. 2009   #3
-
0
-

int je na normálních počítačích a normálních překladačích 32bitový, což je rozsah zhruba od -2 000 000 000 do +2 000 000 000, takže tam problém nebude (za předpokladu, že někde během výpočtu nepracuješ s většími čísly, než je zadání).

Nahlásit jako SPAM
IP: 193.86.140.–
dannyk0
Věrný člen
28. 5. 2009   #4
-
0
-

Podle me tam nekde bude vznikat zaokrouhlovaci chyba pri tom prevodu.
Presneji jsme ten kod nezkoumal,ale nejak se mi nezdaji ty prevody koretktni, netusim zatim proc.

Nahlásit jako SPAM
IP: 85.135.97.–
Jedu v c++,c#,assembler,ASP.NET,PHP,databaze,bezpecnost softwaru[br] -----------------------------------------------------------[br] Muj blog o programovani,hudbe a vsem moznem,co najdu na netu :) [br] http://dannyk.aspone.cz[br] -----------------------------------------------------------[br] Na foru mam nejake prispevky pod nickem Master,tak jen pro upresneni :)
KIIV
~ Moderátor
+43
God of flame
28. 5. 2009   #5
-
0
-

To dannyk : jj vysoce pravdepodobne to bude nekde kolem pow() ... muze byt float, double nebo long double ale furt se to muze zaokrouhlit o nejakej ten rad mimo

krom toho prevod opacnym smerem je podle me snadnejsi cislo = 0; while ( i != -1 ) { cislo = cislo*10 + dva[i]; i--; }

Nahlásit jako SPAM
IP: 80.250.1.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Beb_42
~ Anonymní uživatel
3 příspěvky
28. 5. 2009   #6
-
0
-

Díky KIIVe, tvůj způsob funguje výtečně.
Pro ostatní : taky jste měli pravdu, problém byl v zaokrouhlování. Opravil jsem tedy svůj původní kód aby to klasicky řízeně zaokrouhloval a vše funguje také.



while (i!=-1){
cislo+=dva[i]*((int)(pow(w,i)+0.5));
i--;
}

Nahlásit jako SPAM
IP: 88.146.167.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 99 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý