浙大oj(basic level)1002

本文介绍了作者在解决PAT编程题时遇到的问题及解决方案,包括处理大整数输入溢出、字符串逆序输出以及将数字转换为中文拼音。作者通过将输入改为字符串,使用字符数组存储并逆序输出,解决了问题。同时,用switch语句实现了数字到中文拼音的转换,简化了代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本来昨晚就写的差不多了,但发现一个问题:示例求和只能到45,刚开始还以为是零的情况未考虑导致,最后排查了一遍,并没有问题,今天晚上查了一下资料,发现未考虑int型输入超限了,示例有28位数字,最后改为字符串输入,将内容用字符数组存放,再减去'0'转换为数字,学到了。以下是原题:

1002 写出这个数

读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。每个测试输入包含 1 个测试用例,即给出自然数 n 的值。这里保证 n 小于 10的10次方。在一行内输出 n 的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后一个拼音数字后没有空格。

        我遇到的问题主要有三个,第一个就是开头提到的int问题;第二个是倒序问题,因为用迭代的方法求一个数的每一位数字,都是从最后一位求起(先求余,再除以10),输出结果是倒序的,我原本想了办法,将原来数字倒过来,后来因为int问题,无法实现,参考了(21条消息) PAT (Basic Level) Practice (中文)答案合集_幻想IT赴日的菜鸡一个-优快云博客,发现可以通过中间数组,将内容一个一个存到数组里,再逆序输出;第三个,是汉字问题,我第一个想的是,switch(最后实现也是哈哈有点懒),将所有情况列出来,后来发现可以用字符数组的方法存取,char*res[10]={“1”,...},这样代码也比较简洁。

以下是我的代码:

#include<stdio.h>
#include <iostream>
using namespace std;
int main()
{
    int sum=0;
    string str;
    cin >> str;
    for(int i=0;i<str.length();i++)
        sum+=str[i]-'0';
    int temp[100],j=0;
    while(sum!=0)
    {
        temp[j++] = sum % 10;
        sum= sum/ 10;
    }
    for (j--; j >= 0; j--)
    {
        switch (temp[j])
        {
        case 0:printf("ling"); break;
        case 1:printf("yi"); break;
        case 2:printf("er"); break;
        case 3:printf("san"); break;
        case 4:printf("si"); break;
        case 5:printf("wu"); break;
        case 6:printf("liu"); break;
        case 7:printf("qi"); break;
        case 8:printf("ba"); break;
        case 9:printf("jiu"); break;
        }
        if (j != 0)
            cout << " ";
    }
    return 0;


}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值