В вашем коде переполнение.Я напечатал значение, прочитанное scanf, и результат таков:
11111111111111111111111111111111
7 0 922337203685477580
0 7 92233720368547758
8 7 9223372036854775
5 8 922337203685477
7 8 92233720368547
7 8 9223372036854
4 8 922337203685
5 8 92233720368
8 8 9223372036
6 8 922337203
3 8 92233720
0 8 9223372
2 8 922337
7 8 92233
3 8 9223
3 8 922
2 8 92
2 8 9
9 8 0
9 1
Я использовал этот модифицированный код:
#include <stdio.h>
int main(void)
{
int count=0,max=0, digit;
long long int n;
scanf("%lld",&n);
while(n)
{
digit=n%10,n/=10;
printf("%d %d %lld\n",digit, max, n);
if(digit==max)
count++;
else if(digit>max)
max=digit,
count=1;
}
printf("%d %d",max, count);
return 0;
}
Чтобы избежать переполнения, вам нужно прочитать число какстрока char*number
и обрабатывать цифры как символы.Вы должны сделать это так:
int main(void)
{
int count=0;
char max='0', digit;
char n[1000], *p=n;
fgets(n, 1000, stdin);
while(*p)
{
digit=*p++;
if(digit==max)
count++;
else if(digit>max)
max=digit,
count=1;
}
printf("%c %d",max, count);
return 0;
}