Наибольшее из 3 чисел.

  • Автор темы ALDon
  • Дата начала
Статус
Закрыто для дальнейших ответов.
A

ALDon

#1
Нужно написать программу, которая выводит максимальное цисло среди трех цисел.Длина строка состоящий из 3 цисел не больше 10^100.Нужно решить используя указатель.Примеры:
вводим 4 5 6, выводить 6;
вводим 547865 98 25364, выводит 547865;
вводим 9958439238923098349024 895 663289,выводит 9958439238923098349024;

вот код который я написал
Код:
#include<iostream>
using namespace std;
int main (){
int a,b,c;
cin>>a>>b>>c;
if((a>b && a>=c )|| (a>c && a>=B))
cout<<a;
if(b>a && b>=c)
cout<<b;
if(c>a && c>b)
cout<<b;
return 0;}
но если ввести 9958439238923098349024 код не работает
 

Vunderkind

Active member
26.10.2010
27
0
#4
Vunderkind
Не войдет, там 10 значное десятичное число входит максимум(точно придел не помню, первая четверка xD), а тут я знаки не считал, но значительно больше.
Насколько я помню нет такой 10^100,Наверное через строку решается
 
F

flashkpi

#5
Алгоритм примерно такой, сначала сравниваешь длину строк, та, которая длиннее, там и больше число, там где, меньше - отбрасываешь, если одинаково, то сравниваешь начиная со старшего разряда
 

DarkKnight

Well-known member
01.08.2010
653
0
#6
3 Задачи одним кодом почти :)

C++:
#include <iostream>

using namespace std;

int main()
{
int a;
char ch[1000];
cin.getline(ch,1000);

int Max = 0;
char buffer[128]; //Введем буферную переменную
memset(buffer,0,128); //Обнулим ее
char *pStr = buffer; //Введем указатель на буферную перемнную

char Result[128]; //Результирующее слово
memset(Result,0,128);

for (int i = 0; i <= strlen(ch); i++) //Обойдем всю строку включая завершающий символ
{
if ((unsigned char)isdigit(ch[i])) //Если символ циферный то
{
if (strlen(buffer) ==0 && ch[i]=='0') continue; //Если начальные символы нули их мы писать не будем
*pStr = ch[i]; //Посимвольно пишим символы в буфер из ch
pStr++; //Сдвиг указателя 
}
else if (strlen(buffer)) //Если же не циферный и в buffer - что то есть то
{
if (strlen(buffer) > Max)
{
strcpy(Result,buffer); //Скопируем из буфера в результат
Max = strlen(buffer);
}
else if (strlen(buffer) == Max)
{
//там по заданию что сто про указатели было сказанно
char *pResult = Result;
pStr = buffer;
while (*pResult != 0)
{
if (*pResult < *pStr) //Посимвольно (поразрядно для нашего примера) сравним
{
strcpy(Result,buffer); //Скопируем из буфера в результат
Max = strlen(buffer);					
break;
} else if (*pResult > *pStr) break;
pResult++;
pStr++;
}
}
memset(buffer,0,128); //Обнулим буферную переменную
pStr = buffer; //Установим указатель на начало буфера
}
}
cout<<"Result : '"<<Result<<"'"<<endl; //Выведим результат
cout<<"Result Format : ";
for (int i = 0; i<strlen(Result); i++)
{
cout<<Result[i];
if ((strlen(Result)-1-i)%3 == 0) cout<<" ";
}


}
 
Статус
Закрыто для дальнейших ответов.