006
13.10.2002, 13:21 Uhr
void*
Generic Pointer (Operator)
|
Hallo!
Und hier schon mal mein Programm zum Erzeugen der Zahlenfolgen:
C++: |
#include <vector> #include <math.h> #include <memory>
#include <conio.h>
bool EndConditionReached(unsigned int current, const std::vector<unsigned int> &series, std::vector<unsigned int>::size_type &pos) { std::vector<unsigned int>::size_type end=series.size(); for(pos=0; pos!=end; ++pos) { if(series[pos]==current) return(true); } return(false); }
unsigned int CalculateNextValue(unsigned int current, unsigned int y, unsigned int z) { // multiply it by z current*=z; size_t length=log10(current)+1;
if(length>y) { // put current in a string char *help=new char[length+1]; // one space for the '\0'
// yikes, little VC++ work-around if(!help) throw(std::bad_alloc()); sprintf(help, "%u", current);
// set all positions but the last y ones to 0 unsigned int max=length-y; for(unsigned int i=0; i<max; ++i) help[i]='0';
// transform it back to an unsigned int sscanf(help, "%u", ¤t);
delete [] help; } return(current); }
unsigned int CalculateXYZSeries(unsigned int x, unsigned int y, unsigned int z, std::vector<unsigned int> &series) { series.clear(); unsigned int current=x; series.push_back(current);
for(;;) { current=CalculateNextValue(current, y, z); std::vector<unsigned int>::size_type repeatPosition=0; if(!EndConditionReached(current, series, repeatPosition)) series.push_back(current); else return(series.size()-repeatPosition); } }
void SeriesOutput(const std::vector<unsigned> &series) { std::vector<unsigned int>::const_iterator current=series.begin(), end=series.end(); for(; current!=end; ++current) { printf("%u\n", *current); } }
int main(void) { unsigned int x, y, z; scanf("%u %u %u", &x, &y, &z); std::vector<unsigned int> series; unsigned int period; period=CalculateXYZSeries(x, y, z, series); SeriesOutput(series); printf("Period: %u\n", period); getch(); return(0); }
|
Gruß void* -- Gruß void* Dieser Post wurde am 13.10.2002 um 13:22 Uhr von void* editiert. |