编程小白入门 之 PAT乙级1002题

编程小白入门 之 PAT乙级1002题,第1张

编程小白入门 之 PAT乙级1002题

PAT乙级1002
    • 题目详情
      • 1002 写出这个数 (20 分)
        • 输入格式:
        • 输出格式:
    • 题解
      • C++版本
      • Python版本
    • 总结

题目详情 1002 写出这个数 (20 分)

读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。

输入格式:

每个测试输入包含 1 个测试用例,即给出自然数 n 的值。这里保证 n 小于 10100。

输出格式:

在一行内输出 n 的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后一个拼音数字后没有空格。

题解 C++版本
#include 
#include 
using namespace std;
int main() {
    string s;
    cin >> s;
    int sum = 0;
    string str[10] =  {"ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu"};
    for (int i = 0; i < s.length(); i++)
        sum += (s[i] - '0');
    string num = to_string(sum);
    for (int i = 0; i < num.length(); i++) {
        cout << str[num[i] - '0'];
        if (i != num.length() - 1)  cout << ' ';
        else    cout << endl;
    }
    return 0;
}

Python版本
n = input()                  # input() 函数接受一个标准输入数据,返回为 string 类型
sum = 0
piny = ["ling",  "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu"]
for number in n:
    sum = sum + (ord(number) - ord('0'))
sum_str = str(sum)
for i in range(len(sum_str)):
    if i != len(sum_str) - 1:
        print(piny[ord(sum_str[i]) - ord('0')], end=' ')
    else:
        print(piny[ord(sum_str[i]) - ord('0')])
-------------------以下这部分代码跑步来的结果部分正确,但具体原因没找到-------------------
for number in sum_str:
    if(number == sum_str[len(sum_str) - 1]):
        print(piny[ord(number) - ord('0')])
    else:
        print(piny[ord(number) - ord('0')], end = ' ')

n = input()
# 输入可以用map函数把每个字符转化为int类型,map返回一个迭代器,使用 list() 将其转换为列表
x = list(map(int,n))	
y = sum(x)
dt = {'0':'ling',
      '1':'yi',
      '2':'er',
      '3':'san',
      '4':'si',
      '5':'wu',
      '6':'liu',
      '7':'qi',
      '8':'ba',
      '9':'jiu',
      }
s = str(y)
for i in range(len(s)):
    if i != len(s)-1:
        print(dt[s[i]], end=' ')
    else:
        print(dt[s[i]])

总结

1、题目中要求 n 小于 10100 ,那么我们设 n 为 long long 数据类型是不合理的(long long可以表示的最大数据为 263 - 1,263 - 1 小于 10100)因此我们要用string类型来定义输入的n。

2、当我们把字符串类型作为输入数据的类型时,怎样计算出各位数字的和是一个值得思考的问题。首先应想到如何定位出输入的各位数字,其次就是利用定位出的各位数字(每一位都是char类型)- ‘0’ 来把该字符转化为对应的数字。

3、这里需要注意的是,在C语言等高级语言中,字符之间的减运算都是支持的,但是在python中直接进行字符减运算是不被允许的。

但是我们经常需要进行字符之间的减运算,那么在python中可以借助ord()函数实现,ord()是python自带的函数,无需导入。

ord()函数实际上是将字符转化成对应的ASCII码值,然后通过ASCII码值进行加减运算。

4、这次的Python版本代码让我学习到了map()函数的用法,sum()函数的用法(即可以直接对整个列表的数据求和),还有print()函数中可用end = ’ '指定输出的内容以什么结束。

5、for number in n 是循环输出 n 这组字符串中的每个字符
for i in range(len(s)) 是对整型int数据进行循环,类似于C++中的for(int i=0; i<10; i++)

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4751356.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-08
下一篇 2022-11-08

发表评论

登录后才能评论

评论列表(0条)

保存