C语言——PAT 乙级(1002.读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。)

问题遇到的现象和发生背景
问题相关代码,请勿粘贴截图

PTA平台显示我部分正确

运行结果及报错内容
我的解答思路和尝试过的方法
#include<iostream>
#include<math.h>
using namespace std; 
int main()
{
    cout<<"请输入一个正整数"<<endl;
    int n=0;
    do
    {
        cin>>n;
        if(n>pow(10,100))cout<<"输入的数不小于十的一百次方,请重新输入"<<endl;
    }
    while(n>pow(10,100));
    int sum=0;
    for(n;n!=0;n/=10)
    {
        int y;
        y=n%10;
        sum+=y;
    }
    while(sum!=0)
    {
        int x;
        x=sum%10;
        switch(x)
        {
            case 1: cout<<"yi";
                break;
            case 2: cout<<"er";
                break;
            case 3: cout<<"san";
                break;
            case 4: cout<<"si";
                break;
            case 5: cout<<"wu";
                break;
            case 6: cout<<"liu";
                break;
            case 7: cout<<"qi";
                break;
            case 8: cout<<"ba";
                break;
            case 9: cout<<"jiu";
                break;
            case 0: cout<<"ling";
                break;
        }
        sum/=10;
        if(sum!=0)cout<<" ";
    }
    return 0;
}
我想要达到的结果

#include<iostream>
#include<math.h>
#include<string>

using namespace std;
int main()
{
    string han[]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
    
    cout<<"请输入一个正整数"<<endl;
    long n=0;//int n=0;
    do
    {
        cin >> n;
        if(n>pow(10,100))cout<<"输入的数不小于十的一百次方,请重新输入"<<endl;
    }
    while(n>pow(10,100));

    int sum=0,s[100],len=0;

    for(; n!=0; n/=10)
    {
        //int y;
        //y=n%10;
        sum+=n%10;//y;
    }

    //处理sum为0的情况    
    if(sum==0)
    {
        len=1;
        s[0]=0;
    }

    while(sum!=0)
    {
        int x;
        x=sum%10; //从个位开始取数字,输出需要把结果反过来。
    
        s[len++]=x;
        sum/=10;
        //if(sum!=0)cout<<" "; 
        
    }

    for(len--;len>=0;--len) //逆序输出
    {
        cout << han[s[len]];
        if(len!=0)cout<<" ";
    }

    return 0;
}