Предмет: Информатика, автор: MrMiner1

Язык C++
Дано два натуральных числа a, b; a∈N; b∈N.
На отрезке от a до b требуется найти натуральное число с максимальным произведением его цифр. Каким образом это можно сделать наиболее оптимально.


MrMiner1: Пример теста: a=1; b=111; Вывод:99
MrMiner1: a=134; b=186758656; Вывод:179999999
MrMiner1: И уточнение a<=b
MrMiner1: Последняя поправка: при a=134; b=186758656; Вывод 99999999
srzontmp: Задайте вопрос снова, получите решение.

Ответы

Автор ответа: srzontmp
1

#include <iostream>

using namespace std;

int main() {

   string a,b;

   int m,k=0;

   cout<<"a = "; cin>>a;  

   cout<<"b = "; cin>>b;

   int ind=b.length();

   if (a.length()==b.length())

       while ((a[k]==b[k]) && (k<b.length()-1)) k++;

   for (int i=k; i<b.length()-1; i++) {

      if (b[i]==48) break;

      m=b[i+1]-48;

      if (i<b.length()-2) m--;

      if ((b[i]-48)*m < max((b[i]-49),1)*9) {

         if ((b[i]-49==0) && (i>0)) continue;                              

         ind=i+1; b[i]--; break;

      }  

   }                            

   for (int i=ind; i<b.length(); i++) b[i]='9';

   if (b[0]=='0') b.erase(0,1);

   cout<<b<<endl;

   system("pause");      

   return 0;

}


Похожие вопросы
Предмет: Математика, автор: KUNDE
Предмет: Биология, автор: kemelbekovdaniyar0
Предмет: История, автор: artem06052005m