Подкиньте идейку, что делать с числом

тут не то что помощь кодом требуется, а скорее советом - идеями…

есть например число из 100 символов, и что мне с ними сделать ? что бы упростить его до 1 символа желательно… и что бы число было > 0

как вариант на множители разложить… все же запись уменьшится…

void setup() {
Serial.begin(9600); // Инициализация последовательного порта
Serial.println("Введите число для разложения на простые множители:");
}

void loop() {
if (Serial.available() > 0) {
long number = Serial.parseInt(); // Чтение числа из последовательного порта
Serial.print("Вы ввели число: ");
Serial.println(number);
Serial.print("Простые множители числа ");
Serial.print(number);
Serial.println(":");
factorize(number); // Вызов функции разложения на множители
Serial.println(); // Пустая строка для удобства
Serial.println("Введите следующее число:");
}
}

void factorize(long n) {
// Проверка на делимость на 2
while (n % 2 == 0) {
Serial.print(2);
Serial.print(" ");
n /= 2;
}
// Проверка на делимость на нечетные числа от 3 до sqrt(n)
for (long i = 3; i * i <= n; i += 2) {
while (n % i == 0) {
Serial.print(i);
Serial.print(" ");
n /= i;
}
}
// Если n остается больше 2, то это простое число
if (n > 2) {
Serial.print(n);
Serial.print(" ");
}
}

но не совсем то… запись слишком большая… в идеале бы получить 1 символ…
дополнительные вводные:

  1. первый символ всегда будет начинаться с 1+
  2. число будет целиковым, разделения точками не будет
  3. если и вычитать из результата некую сумму, пока не получится 1 или 9, то надо одну и ту же сумму постоянно, что бы подсчитать сколько раз я провел эту операцию))) и желательно что бы этих самых операций было не много, что бы быстро это было…
  4. сумма всегда разная, но состоять будет из 100 символов и начинаться не с 0
  5. если для чего это интересно, то для того что бы уменьшить объем записи, архивация данных можно сказать… и после восстановить ее, не зависимо от того что это не реально!))) сделаю то что реально…
  6. полученный результат такого сокращения так же должен быть точный, и не разделяться точкой

если в итоге получится число более 1 символа, то может тоже пойдет…
сейчас просто не могу придумать однообразную операцию которую надо делать над суммой…

Это всё потому, что никакого образования у тебя нет.

2 лайка

как максимум это следственно причинная связь, а делать то мне что с ней, она мне функцию или способ не подскажет…

если у вас образование большое, такое чтоб на обоих хватило, так накиньте идею, я вроде не прошу что то запредельное… всего то число сократить, какой то операцией однообразной… и посчитать количество проведенных манипуляций… на код не смотрите, просто идей совсем вроде нет, кроме как подбирать число в ручную и вычитать его из результата несколько раз… может у тех у кого образование есть, обзовет как то операцию которую надо провести…

Операция по сокращению чего-либо называется свёртка. Ищи.

UnforgivenII
а это точная информация ?)))
на тот случай если не умею объяснять и запутал…
возьмем пример 3рех значное число, из 3рех символов - 947 и вычитая каждый раз по 500 мы получим результат 447, и 1 операцию… что то похожее можно сделать сверткой ?)))
или вы все таки имели в виду сделать так 9+4+7 = 20 20=2 что обратно не вернуть в 947…
все в голове туман, пошел спать, а то уже в мыслях путаюсь…

const int decrementValue = 500;
int number = 30152;
int counter = 0;
void setup() { Serial.begin(9600); }
void loop() {
if (Serial.available() > 0) {
char command = Serial.read();
if (command == '1') { // отправляем 1 в компорт
// Вычитаем 500, пока это возможно
while (number >= decrementValue) {
number -= decrementValue;
counter++; }
Serial.print("Number after decrement: ");
Serial.println(number);
Serial.print("Counter: ");
Serial.println(counter);
} else if (command == '2') { // отправляем 2 в компорт
// Прибавляем 500, пока счетчик не равен 0
while (counter > 0) {
number += decrementValue;
counter--; }
Serial.print("Number after increment: ");
Serial.println(number);
Serial.print("Counter: ");
Serial.println(counter);
}
}
}

все таки незя идти спать, а вдруг за это время уже подскажут)))
извините если не умею объяснять, попробую перефразировать на языке кода…
в принципе это то что нужно, но вот только когда суммы большие, и могут быть разные, то значение 500 становится сложно подобрать, и количество операций возрастает сильно… или остаток 152 слишком длинный… нет ли какого то способа другого, который выполнит это быстрее…
если при этом еще остаток будет не 152 а меньше, от 1 до 9, то это будет сверхшикарно…

У чисел нет символов. Символы есть у графического отображения чисел. Цифры называются. И нужны они исключительно для человека. Осознай это, и работать с числами станет проще.

Касательно вопроса - если ты имеешь в виду десятичное исчисления, то просто дели на 10 и бери остаток до тех пор, пока остаток больше 9

На десять делить сложно и медленно. Лучше на 2. И придем к двоичному счислению :))

Да, примерно так : 10000=100*100…на два знака.

Ты правда настолько идиот или просто чувство юмора мне отказывает?

4 лайка

Вот поэтому я в постах иногда даже текст не читаю, не то что код. Не то здоровье, чтобы в почеркушках сумасшедших искать ошибки или смысл.

2 лайка

феерический

5 лайков

Я что-то нихрена не могу понять - в чем смысл описанных им «разложений»? Что на суммы, что на множители?
Ну вместо одного числа на 100 цифр будет 100 цифр. В чем выигрыш?

ТC решил утереть нос 7zip… сжать в 100 раз … это вам не писюнами трясти …

1 лайк

нет, скинуться и купить ТС биомышь, вот ведь не просто так он во всех постах 5000 озвучивает, по ценнику самое то

Ещё один

он же хочет это сделать для весьма узких условий, 7-zip очень хорошо работает на бОльших массивах, байт от 300 видимо

Идиот?
Феерический?
Попавший в игнор лист?
…мда…

мне лично кажется, следы интеллекта в пустотах его черепной коробки силятся понять главную задачу арифметики (разложение натуральных чисел на простые множители), но никак не может этого сделать, количества интеллекта явно не хватает. Однако, его достаточно, чтобы загружать остальные элементы ЦНС дебильными задачами наподобие вот этой.

1 лайк

Не будем забегать вперед :slight_smile: Я лишь реагирую на то, что вы пишете.