PTA1002_写出这个数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xFt6W4sQ-1602835074836)(C:\Users\11965\AppData\Roaming\Typora\typora-user-images\image-20201016154633451.png)]

1.思路

​ 这题看到网上有许多方法,我是这样想的,先将所有位上的数的和求出来,再去用中文拼音表示出这个数字,刚开始做的时候以为这个和不止三位,=。=,AC之后才发现确实只有3位,或者2位,或者1位,那么就不用考虑的那么复杂了,求出来之后直接分解就好。1.求和部分,受y总高精度加法的启发,感觉直接读入字符串,然后通过头文件"vector"里面的size(),存储直接用向量来存就可了,这样表示比较方便,将字符串中的数字一个个转换成数组里的数后再求和就好了。2.拼音表示部分,用字符数组储存好拼音(不太会*),后续输出注意空格。贴个代码

#include <iostream>
#include <vector>
using namespace std;
char s[][10]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu","shi"};//定义该数组,注意是二维的
int main()
{
    string a ;
    int sum=0;
    int k,i,copy,n;
    vector<int> A;//定义vector存储后面加进来的数
    cin >> a;	//直接cin吧,方便点
    for(i =0;i<a.size();i++) A.push_back(a[i]-'0');	//数字转换然后加进去
    
    for(i =0;i<A.size();i++) sum+=A[i];	//求所有位数的和
    
    if(sum/100>0&&sum/100<=9)	//3位
    {
         printf("%s ",s[sum/100]); 
         printf("%s ",s[sum%100/10]);
         printf("%s",s[sum%10]);
    } 
    else if(sum/10>0&&sum/10<=9)	//2位
    {
        printf("%s ",s[sum/10]);
   	    printf("%s",s[sum%10]);
    }
    else						//1位
   		 printf("%s",s[sum]);
    return 0;
}

2.小结

​ PTA乙级真题的第二题,这题说实话没想到的是最后这个分解原来只有三位,求和的话我觉得这种方法求长整数所有位数上数字的和比较方便,高精度算法中也能用到这种方法。(->戳y总) 2020/10/16

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值