当前位置:   article > 正文

浙大oj(basic level)1002_浙江大学oj

浙江大学oj

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

1002 写出这个数

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

        我遇到的问题主要有三个,第一个就是开头提到的int问题;第二个是倒序问题,因为用迭代的方法求一个数的每一位数字,都是从最后一位求起(先求余,再除以10),输出结果是倒序的,我原本想了办法,将原来数字倒过来,后来因为int问题,无法实现,参考了(21条消息) PAT (Basic Level) Practice (中文)答案合集_幻想IT赴日的菜鸡一个-CSDN博客,发现可以通过中间数组,将内容一个一个存到数组里,再逆序输出;第三个,是汉字问题,我第一个想的是,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;


}

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/617570
推荐阅读
相关标签
  

闽ICP备14008679号