PAT乙级1002. 写出这个数 C++

PAT乙级1002. 写出这个数 C++_第1张图片


本人没有什么特殊的简单的解题技巧,为了安全,此次用了C++的字符串,从n
小于10的100次方可以看出n肯定不是long之类的,应该是字符串。主要就是对int和string之间的转换,以及输出了。我的代码如下,个人感觉应该不是最优的,但是基本能讲清:


#include 
#include 
using namespace std;
void static readNumber(char char_number);
int main()
{
    string input;//输入的数字
    cin>>input;
    unsigned int sum=0;//和
    //求和
    for(unsigned int i=0;iunsigned int)input[i]-48;
    }

    //装入倒序的结果字符串
    string number_sum="";
    while(1)
    {
        number_sum+=(char)(sum%10+48);
        sum/=10;
        if(sum/10==0)//当这个运算进行到还剩最后一位的时候,也有可能是只有一位,并且还是零
        {
            if(sum%10!=0)//从这里,我们考虑是零的边界情况,只有这一位不是零的时候才装入
            {
            number_sum+=(char)(sum%10+48);
            }
            break;
        }
    }
    //变为正序字符串,装入结果集
    string result="";
    for(int i=number_sum.length()-1;i>=0;i--)
    {
        result+=number_sum[i];
    }
    //输出结果
    for(int i=0;iif(i!=result.length()-1)//当且仅当遍历输出的数字不是最后一个的时候才打印空格
        {
            cout<<" ";
        }else
        {

        }

    }
    system("pause");
    return 0;
}

void static readNumber(char char_number)
{
    switch((int)char_number-48)
    {
        case 0:
            cout<<"ling";
            break;
        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;
    }
}

最后,谈一点我的感想吧。string这个类还是很神奇的,其实本题中没有显现出这个东西的优越性,用char数组一样可以解决。当然,对于“逆序”这件事儿,方法还是很多的,我们可能首先就想到栈这个东西,逆序其实有时候还会用到双向队列,等等吧。祝愿大家编程愉快~没有bug~

你可能感兴趣的:(C++,Algorithm)