
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.97.14.87] |
![]() |
|
Страницы: (3) 1 2 [3] все ( Перейти к последнему сообщению ) |
Сообщ.
#31
,
|
|
|
Цитата VisualProg @ Вот вам ещё пара примеров, от которых препод будет в восторге: Со строковым буфером, как у Славяна: ![]() ![]() #include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> typedef struct max { char max1; char max2; char pos1; char pos2; } Max; int main() { long n = 360521; /* число (надо бы вводить?) */ char i; int len = floor(log10(abs(n)))+1; /* вычисляем число цифр */ char* bufer = (char*)malloc(len*sizeof(char)); /* буфер для числа */ Max* max = (Max*)malloc(sizeof(Max)); /* буфер для результата */ memset(max,0,sizeof(Max)); snprintf(bufer,len,"%d",n); /* переводим число в строку, 10-ичная система счисления) */ for(i=0;i<len;i++){ if((char)(*(bufer+i)-'0') > max->max1) { max->max1 = (char)(*(bufer+i)-'0'); max->pos1 = i; } } for(i=len-1;i>=0;i--){ if((char)(*(bufer+i)-'0') > max->max2 && (char)(*(bufer+i)-'0')!=max->max1) { max->max2 = (char)(*(bufer+i)-'0'); max->pos2 = i; } } printf("\npos1=%d", max->pos1); /* пишем положение старшей цифры */ printf("\npos2=%d", max->pos2); /* пишем положение почти старшей цифры */ printf("\nmax1=%d", max->max1); /* пишем максимальную цифру */ printf("\nmax2=%d", max->max2); /* пишем максимальную цифру */ free(bufer); free(max); return(0); } Без строк, чистая математика: ![]() ![]() #include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> typedef struct max { char max1; char max2; char pos1; char pos2; } Max; char get_digit(long n, int i) { long pos; pos = n % (long)pow(10, i+1); if (i > 0) { pos /= (long)pow(10, i); } return (char)pos; } int main() { long n = 360521; /* число (надо бы вводить?) */ char i; int len = (int)floor(log10(abs(n)))+1; /* вычисляем число цифр */ Max* max = (Max*)malloc(sizeof(Max)); /* буфер для результата */ memset(max,0,sizeof(Max)); for(i=0;i<len;i++){ if(get_digit(n,i)>max->max1 ) { max->pos1 = i; max->max1 = get_digit(n,max->pos1); } } for(i=len-1;i>=0;i--){ if(get_digit(n,i)>max->max2 && get_digit(n,i)!=max->max1) { max->pos2 = i; max->max2 = get_digit(n,max->pos2); } } printf("\npos1=%d", max->pos1); /* пишем положение старшей цифры */ printf("\npos2=%d", max->pos2); /* пишем положение почти старшей цифры */ printf("\nmax1=%d", max->max1); /* пишем максимальную цифру */ printf("\nmax2=%d", max->max2); /* пишем максимальную цифру */ free(max); return(0); } Лень всё перепроверять, но, должно всё работать. Шестёрка в журнале вам обеспечена... спасибо большое. мне просто принцип работы понять нужно было)) |