Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Kolejne cyfry sqrt(2)


MXVOL

Rekomendowane odpowiedzi

Opublikowano

No więc robię apkę, która ma liczyć kolejne cyfry sqrt(2), i sporządziłem taki kodzik (pewno jest napisany w cholerę źle, w cholerę niewydajnie, w cholerę brzydko, ale na razie priorytetem jest, by po prostu działał):

#include <string>
#include <vector>
#include <iostream>
#include <stdio.h>
#include <sstream>
#include <cstdio>
using namespace std;
inline string its(int n) {
	ostringstream ss;
	ss << n;
	string str = ss.str();
	return str;
}
inline string mul(string a, string  {
	vector<int> result(a.size() + b.size(), 0);
	for( int i = a.size() - 1; i >= 0; i-- ) {
		for( int j = b.size() - 1; j >= 0; j-- ) {
			result[ i + j + 1 ] += ( b[ j ] - '0') * ( a[ i ] - '0' );
		}
	}
	for( int i = a.size() + b.size(); i >= 0; i-- ) {
		if( result[ i ] >= 10 ) {
			result[ i - 1 ] +=result[ i ] / 10;result[ i ] %= 10;
		}
	}
	string wyn;
	for( int i = 0; i < a.size() + b.size(); i++ ) {
		string str = its(result[i]);
		wyn = wyn+str;
	}
	
	return wyn;
}
inline string pn(string zwr) {
	for(int j=1; j<10; j++) {
			int jz = j;
			string n = its(jz);
			string str1 = zwr+n;
			string str2 = zwr+n;
			string wyn = mul(str1,str2);
			if(wyn[1]=='2' || wyn[0] =='2') {
				string add = its(jz-1);
				zwr = zwr+add;
				j = 10;
			}
		}
	return zwr;
}
int main(void) {
	string a = "141421356237309504880168872420969807856967187537694807317667973799073";
	for(int i=0; i<10; i++) {
		a = pn(a);
		cout<<a<<endl;
	}
	getchar();getchar();
	return 0;
}

Tutaj pętla jest ustawiona na 10, czyli powinno policzyć dziesięć kolejnych cyfr, a liczy tylko jedną, i potem już tak jakby pętle kończył ;-;

Wie ktoś, jak naprawić? Z góry dzięki :v

jw19e8.png

Opublikowano

Ja czegoś tutaj nie rozumiem, jeśli masz wypisać cyfry w pierwiastku z 2, a masz w stringu zapisane po kolei jego liczby, to czemu nie zrobisz tego po prostu tak:

#include <iostream>
 
int main() {
    std::string a = "141421356237309504880168872420969807856967187537694807317667973799073";
    for(unsigned char i=0; i<10; ++i) std::cout<<a[i]<<"\n";
}

TuByłaSygnatura.png

Opublikowano

@VereX.

Mi nie chodzi o wypisanie ich, Jezusie ;-;

To jest kilka pierwszych cyfr, A PROGRAM MA ZA ZADANIE LICZYĆ KOLEJNE, I WYPISYWAĆ NOWY, DOKŁADNIEJSZY PIERWIASTEK

Mam nadzieję, że rozumiesz, o co mi chodzi :v

jw19e8.png

Opublikowano

@VereX.

Ale ja wiem, że metoda, jaką próbuję to robić działa, tylko jakiś błąd jest w kodzie, więc nic nie trzeba przepisywać.

 

Działa to tak:

Ma te pierwsze liczby, czyli 141421356237309504880168872420969807856967187537694807317667973799073

 

Dopisuje 1

Wynik wynosi mniej niż 2, więc idzie dalej

Dopisuje 2

Wynik wynosi mniej niż 2, więc idzie dalej

Dopisuje 3

Wynik wynosi więcej niż 2, więc cofa się, i zostaje z dopisanym 2

 

Czyli mam

1414213562373095048801688724209698078569671875376948073176679737990732

 

i teraz powinno znowu powtarzać czynność, tylko jest JAKIŚ BŁĄD w kodzie, i kolejnej nie wykonuje.

jw19e8.png

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...