Błędna odpowiedź w zadaniu na SPOJu - FCTRL3
Ostatnio zmodyfikowano 2015-10-10 22:18
fifciuu Temat założony przez niniejszego użytkownika |
Błędna odpowiedź w zadaniu na SPOJu - FCTRL3 » 2015-10-10 20:32:37 Witam, ostatnio zacząłem robić zadania na SPOJu. No i przy tym oto zadaniu: http://pl.spoj.com/problems/FCTRL3/ Występują odpowiedź ze strony SPOJa, iż program daje błędną odpowiedź. Nie mam pojęcia co jest nie tak, główkuję nad tym kilka dni i nie mogę wymyślić. Pewnie to jakaś błachostka, której nie mogę dostrzec. Niżej prezentuję kod(oczywiście jest to wersja nr. 1 stworzona "na chłopski rozum"): #include <iostream> #include <string>
using namespace std;
int ile = 0;
long silnia( int num ); void longest( long in[], short siz, int &set ); void wypiszCyfry( long num, short longest ); void poKolei( string num, short len);
int longe;
int main(int argc, char *argv[]) { cin>>ile; if( ile<1 || ile>30 ) return 0; long inputNum[ ile+1 ]; int i = 1; do { cin>>inputNum[ i ]; if( inputNum[ i ] < 1) return 0; if( !silnia( inputNum[ i ] ) ) return 0; i++; } while(i<=ile); longest( inputNum, ile+1, longe ); i = 1; do { long temp = silnia( inputNum[ i ] ); if( !temp ) continue; wypiszCyfry( temp, longe ); cout<<endl; i++; } while(i<=ile); return 0; } long silnia( int num ) { long wynik = 1.0; if( num== 1 ) return 1; for( int i = 2; i<=num; i++ ) wynik*=i; if( wynik > 1000000000 ) return 0; return wynik; } void longest( long in[], short siz, int &set ) { for( int i =1; i<siz; i++) { string strNum = to_string(silnia( in[ i ])); short len = strNum.length(); if( len > set ) set=len; } } void wypiszCyfry( long num, short longest ) { string strNum = to_string(num); short len = strNum.length(); for( int i = 0; i<longest; i++) { if( len < longest){ if( len+i < longest) cout<<"0 "; else{ poKolei(strNum,len); break; } } else{ cout<<strNum.substr( i, 1 )<<" "; } } } void poKolei( string num, short len) { for( int i = 0; i<len; i++) cout<<num.substr( i, 1 )<<" "; }
|
|
mateczek |
» 2015-10-10 22:18:09 te zadania są czasami głupio pokomplikowane 1*2*3*4*5*6*7*9*10= 2*5*10=100*.... byle co dwie ostatnie cyfry to: 0 0 pamiętaj o spacjach między cyframi !!! w testach są tak wielkie liczby że zwyczajnie nie policzysz silnii for( int i = 2; i <= num; i++ ) { wynik *= i; wynik = wynik % 100; if( wynik == 0 ) break; }
a wyświetlenie dwóch cyfr po spacjach można na szybkiego. cout << wynik / 10 << ' ' << wynik % 10 << endl; |
|
« 1 » |