写了我一晚上的代码
看到评论区c语言解法比较少,本来程序主体对的 但一直有格式问题
好不容易调试好了

#include<stdio.h>
#include<string.h>
char str1[20][1000] = {"zero","one","two","three","four","five","six","seven","eight","nine"};
char str2[20][1000] = {"ten","eleven","tweleve","thirteen","fourteen","fifteen","sixteen","seventeen","eighteen","nineteen"};
char str3[20][1000] = { "0","0","twenty","thirty","forty","fifty","sixty","seventy","eighty","ninety" };
char Temp[1000];
char result[1000];
void read(long  a[], int cnt)
{
    if (cnt == 1)
    {
        strcpy(Temp, str1[a[cnt - 1]]);
    }
    else if (cnt == 2 && a[cnt - 1] == 1)
    {
        int b = a[0] + 10 * a[1];
        strcpy(Temp, str2[b - 10]);
    }
    else if (cnt == 2 && a[cnt - 1] > 1)
    {
        strcpy(Temp, str3[a[cnt - 1]]);
        //strcat(Temp, " ");
        if (a[0] != 0)
        {
            strcat(Temp, " ");
            strcat(Temp, str1[a[0]]);
        }
    }
    else if (cnt == 3&&a[cnt-1]==0)
    {
        if(a[cnt-2]==1)
        {
            int b = a[0] + 10 * a[1];
            strcpy(Temp, str2[b - 10]);
        }
        else if(a[cnt-2]>1)
        {
            strcpy(Temp, str3[a[cnt - 2]]);
            //strcat(Temp, " ");
            if (a[0] != 0)
            {
                strcat(Temp, " ");
                strcat(Temp, str1[a[0]]);
            }
        }
    }
    else if(cnt == 3&&a[cnt-1]>=1)
    {
        strcpy(Temp,str1[a[cnt-1]]);
        strcat(Temp, " hundred");
        if(a[cnt-2]!=0||a[0]!=0)
        {
            strcat(Temp," and ");
            if(a[cnt-2]==1)
            {
                int b = a[0] + 10 * a[1];
                strcat(Temp, str2[b - 10]);
            }
            else if(a[cnt-2]>1)
            {
                strcat(Temp, str3[a[cnt - 2]]);
                //strcat(Temp, " ");
                if (a[0] != 0)
                {
                    strcat(Temp, " ");
                    strcat(Temp, str1[a[0]]);
                }
            }
            else if(a[cnt-2]==0)
            {
                strcat(Temp,str1[a[0]]);
            }
        }
    }
}

int main(void)
{
    long n;
    scanf("%ld", &n);
    long a[200]={0};
    long a2[3] = { 0 };
    long a3[3] = { 0 };
    long a4[3] = { 0 };
    int i = 0;
    int cnt = 0;
    


    while (n != 0)
    {
        cnt++;
        a[i++] = n % 10;
        n /= 10;
    }

    
    

    if (cnt <= 3)
    {
        read(a, cnt);
        strcpy(result, Temp);
    }
    else if (cnt > 3 && cnt <= 6)
    {
        for (int j = 3; j < cnt; j++)
        {
            a2[j - 3] = a[j];
        }
        read(a2, cnt - 3);
        strcpy(result, Temp);
        strcat(result, " thousand ");
        read(a, 3);
        strcat(result, Temp);
    }
    else if (cnt > 6 && cnt <= 9)
    {
        for (int j = 3; j < 6; j++)
        {
            a2[j - 3] = a[j];
        }
        for (int j = 6; j < cnt; j++)
        {
            a3[j - 6] = a[j];
        }
        read(a3, cnt - 6);
        strcpy(result, Temp);
        strcat(result, " million ");
        read(a2, 3);
        strcat(result, Temp);
        strcat(result, " thousand ");
        read(a, 3);
        strcat(result, Temp);
    }
    else if (cnt > 9 && cnt <= 12)
    {
        for (int j = 9; j < cnt; j++)
        {
            a4[j - 9] = a[j];
        }
        for (int j = 6; j < 9; j++)
        {
            a3[j - 6] = a[j];
        }
        for (int j = 3; j < 6; j++)
        {
            a2[j - 3] = a[j];
        }
        read(a4, 1);
        strcpy(result, Temp);
        strcat(result, " billion ");
        read(a3, 3);
        strcat(result, Temp);
        strcat(result, " million ");
        read(a2, 3);
        strcat(result, Temp);
        strcat(result, " thousand ");
        read(a, 3);
        strcat(result, Temp);

    }
    printf("%s",result);
    //printf("%d\n", cnt);
    /*for (i = 0; i < 3; i++)
    {
        printf("%ld", a[i]);
    }*/
    return 0;
}