为什么只是部分通过?代码哪里有问题?

图片说明

#include <stdio.h>
#include <string.h>
#define N 200
int main()
{
    char a[N]={0};
    int i=0,n=0;       //数字长度为n 
    int s=0;
    int flag=0;
    scanf("%s",&a);
    n=strlen(a);
    for(i=0;i<n;i++)
    {
        if(a[i]=='4')
           s++;
    }
    if(n==4)
    {
        flag=1;
    }
    else
    {
        while(n>9)
        {
            if(n%10==4)
            {
                flag++;
            }
            n=n/10;
        }
    }
    printf("%d",s+flag);
    return 0;
}

数字长度为40多的时候,十位进不了while(n>9)

#include <stdio.h>
#include <string.h>
#define N 200
int main()
{
    char a[N]={0};
    int i=0,n=0;       //数字长度为n 
    int s=0;
    int flag=0;
    scanf("%s",&a);
    n=strlen(a);
    for(i=0;i<n;i++)
    {
            if(a[i]=='4')
                s++;
    }

    while(n>3)
    {
            if(n%10==4)
            {
                    flag++;
            }
            n=n/10;
    }

    printf("%d",s+flag);
    return 0;
}