Задать вопрос
@timur102

Как улучшить код на Си(сделать "красивше")?

Задача:
Главный вождь племени Абба не умеет считать. В обмен на одну из его земель вождь другого племени предложил ему выбрать одну из трех куч с золотыми монетами. Но вождю племени Абба хочется получить наибольшее количество золотых монет. Помогите вождю сделать правильный выбор! 
INPUT.TXT
В первой строке входного файла INPUT.TXT записаны три натуральных числа через пробел. Каждое из чисел не превышает 10100. Числа записаны без ведущих нулей. 
OUTPUT.TXT
В выходной файл OUTPUT.TXT нужно вывести одно целое число — максимальное количество монет, которые может взять вождь.


#include <stdio.h>

#define N 103
char* maxNum(char *n1, char *n2);
int length(char s[]);
int main()
{
	FILE *in;
	FILE *out;
	int i,j;
	char c;
	char num1[N];
	char num2[N];
	char num3[N];
	char *nums[3] = {num1,num2,num3}; 
	in = fopen("input.txt","r");
	for (i=0;i<3; ++i){
		j = 0;
		while(c=fgetc(in)){
			if ( c == '\n' || c == ' ' ){
				(*(nums+i))[j] = '\0';
				break;
			}			
			(*(nums+i))[j] = c;
			j++;
			
		}
	}
	fclose(in);
	out = fopen("output.txt","w");
	fprintf(out, "%s",maxNum(*nums, maxNum(*(nums+1),*(nums+2))));
	fclose(out);
	//printf("%s", maxNum(*nums, maxNum(*(nums+1),*(nums+2))));
	return 0;
}

int length(char s[]){
	int i;
	for(i=0; i<N,s[i]!='\0';i++)
		;
	return i;
}

char* maxNum(char *n1, char *n2)
{
	int i;
	if (length(n1)>length(n2))
		return n1;
	if (length(n2)>length(n1))
		return n2;
	for (i=0; i<N;i++){
		if (n1[i]>n2[i])
			return n1;
		if (n2[i]>n1[i])
			return n2;
	}
}

Теперь вопрос: как сделать код меньше, "красивше". Может я где-то не те типы данных использовал. Подскажите, пожалуйста.
  • Вопрос задан
  • 638 просмотров
Подписаться 2 Комментировать