1002 写出这个数 (20 分)

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

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

输入格式:

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

输出格式:

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

样例:">样例:">样例:">输入样例:

1234567890987654321123456789

输出样例:

yi san wu

题目分析:

1.n的长度可以特别大,所以当然是用字符串了

2.假设n最长且最大,和为900,所以用一个长度为三的数组来存放和的每一位数字

3.写一个打印的函数来打印yi、er、san等等(Switch---case)

4.解题完成

代码如下:


C语言:


#include <stdio.h>
#include <string.h>
void print(int x) {
  switch (x) {
    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;
  }
}
int main() {
  char s[100];
  scanf("%s", s);
  int sum = 0;
  for (int i = 0; i < strlen(s); i++) {
    sum += s[i] - '0';
  }
  int a[3], t = 0;
  if (sum == 0) {
    printf("ling");
  } else {
    while (sum) {
      a[t++] = sum % 10;
      sum /= 10;
    }
    print(a[t - 1]);
    for (int i = t - 2; i >= 0; i--) {
      printf(" ");
      print(a[i]);
    }
  }
}


C++:


#include <iostream>
using namespace std;
void print(int x) {
  switch (x) {
    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;
  }
}
int main() {
  string s;
  cin >> s;
  int sum = 0;
  for (int i = 0; i < s.length(); i++) {
    sum += s[i] - '0';
  }
  int a[3], t = 0;
  if (sum == 0) {
    cout << "ling";
  } else {
    while (sum) {
      a[t++] = sum % 10;
      sum /= 10;
    }
    print(a[t - 1]);
    for (int i = t - 2; i >= 0; i--) {
      cout << " ";
      print(a[i]);
    }
  }
}
相关文章
|
6月前
1023 组个最小数 (20 分)
1023 组个最小数 (20 分)
|
6月前
|
Windows
1091 N-自守数 (15 分)
1091 N-自守数 (15 分)
|
6月前
1057 数零壹 (20 分)
1057 数零壹 (20 分)
7-40 最大的数 (10 分)
7-40 最大的数 (10 分)
112 0
7-40 最大的数 (10 分)
L1-054 福到了 (15 分)
L1-054 福到了 (15 分)
82 0
L1-054 福到了 (15 分)
7-9 包装机 (25 分)
7-9 包装机 (25 分)
115 0
7-9 包装机 (25 分)
PTA 1023 组个最小数 (20 分)
给定数字 0-9 各若干个。你可以以任意顺序排列这些数字,但必须全部使用。目标是使得最后得到的数尽可能小(注意 0 不能做首位)。
95 0
|
测试技术
1002 写出这个数 (20 分)
1002 写出这个数 (20 分)
88 0
h0039. 平方数 (15 分)
h0039. 平方数 (15 分)
135 0