void bignum::roundUpToIndex(int index) { //first checks to see if the number is already rounded bignum round_test; round_test.setBase(base); round_test.setDigit(index, 1); //checks to see if number is already rounded without using modulo to prevent stack overflow for (int i = 0; i < index; i++) { if (digits[i] != 0) break; else if (i == index - 1) return; } for (int i = 0; i < index; i++) setDigit(i, 0); if (isPositive()) { bignum increment; increment.setDigit(index, 1); increment.setBase(base); *this += increment; } updateDigits(); }
void Max100500::setNumber(int value) { for (int i = 0; i < 2; i++) { char digit = (value % (int)pow(10, i + 1)) / (int)pow(10, i); setDigit(1 - i, digit); } }
BigInteger::BigInteger(string str) { // Task 2b. Construct a BigInteger from a string. for (int i = 0; i < str.length(); ++i) { string lastVal = str.substr(str.length() - 1 - i, 1); int convert = atoi(lastVal.c_str()); setDigit(i, convert); } }
void MAX7219::setNumber(uint32_t number, int addr) { // number = number % (uint32_t) pow(10, maxDevices); for (uint8_t i = 0; i < 8; i++) { if (number == 0 && i > 0) { setChar(i, ' ', addr); } else { setDigit(i, number % 10, addr); number = number / 10; } } }
void TM1638::setNumberHex(uint32_t number, uint8_t offset, uint8_t width, const uint8_t pad) { while (number && width-- && offset != 0xFF) { setDigit(offset--, number & 0x0F); number >>= 4; } while (width -- && offset != 0xFF) setByte(offset--, pad); }
void TM1638::setNumberPad(uint32_t number, uint8_t offset, uint8_t width, const uint8_t pad) { while (number && width-- && offset != 0xFF) { setDigit(offset--, number % 10); number /= 10; } while (width -- && offset != 0xFF) setByte(offset--, pad); }
void TM1638::setNumber(uint32_t number, uint8_t offset, const uint8_t align) { if (align == TM_LEFT) offset += offset_digits(number); while (number && offset != 0xFF) { setDigit(offset--, number % 10); number /= 10; } }
/* showdigits - Function for multiplexing * Parameters: int* digits (pointer to array of digits), int ms_d (display time / digit in milliseconds) * Description: Multiplexes by turning digits on and of in three pairs. * * Position of the digits on the Nixie clock (hh,mm,ss) * ============================================= * = --- --- --- --- --- --- = * = | A | | B | | C | | D | | E | | F | = * = --- --- --- --- --- --- = * ============================================= * * Pairs(1,2,3) for multiplexing. One pair at a time on * ============================================= * = --- --- --- --- --- --- = * = | 1 | | 2 | | 3 | | 1 | | 2 | | 3 | = * = --- --- --- --- --- --- = * ============================================= */ void NixieAS::showDigits(int* digits, int ms_d){ int iterations = 50/(ms_d*3+5); for(int i=0; i<iterations; i++){ /*== Digit Pair 1 ==*/ setDigit(digits[0],0); //Digit A setDigit(digits[3],1); //Digit D //Switch for pair 1 digitalWrite(_pinLayout[8],HIGH); delay(ms_d); digitalWrite(_pinLayout[8],LOW); /*== Digit Pair 2 ==*/ setDigit(digits[1],0); //Digit B setDigit(digits[4],1); //Digit E //Switch for pair 1 digitalWrite(_pinLayout[9],HIGH); delay(ms_d); digitalWrite(_pinLayout[9],LOW); /*== Digit Pair 3 ==*/ setDigit(digits[2],0); //Digit C setDigit(digits[5],1); //Digit F //Switch for pair 1 digitalWrite(_pinLayout[10],HIGH); delay(ms_d); digitalWrite(_pinLayout[10],LOW); } }
Digit::Digit(string name) { Library l; IntVar *v; l.Load(); if((v=(IntVar*)l.Find(name))==0) { l.Create(name, 69); l.Save(); v=(IntVar*)l.Find(name); } setDigit(v->getValue()); }
BigInteger::BigInteger(int val) { // Task 2a. Construct a BigInteger from an int value int counter = 0; while (val != 0) { int modVal = val%10; setDigit(counter, modVal); val = val/10; ++counter; } }