IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> PAT乙级 1002 -> 正文阅读

[C++知识库]PAT乙级 1002

题目详情

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

输入格式:
每个测试输入包含 1 个测试用例,即给出自然数 n 的值。这里保证 n 小于 10 的100次方。

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

输入样例:
1234567890987654321123456789
输出样例:
yi san wu

错漏

开始时未给字符串预留 ‘\0’ 导致溢出
后发现输入赋值判断条件似乎仍有问题
报错代码部分如下:

char a[101];
for (i = 0; cin.get() != '\n'; i++)
{
	cin >> a;  
}
int div,ten,hun,tho;
for(i=0;i<=100&&a[i]!=0;i++)
{
	sum+=a[i]-48;
}

猜测原因为cin输入与判断条件cin.get矛盾(不确定)
换用getchar进行判断赋值

代码与优化

弟弟思路(我的):

#include<iostream>
using namespace std;
int main()
{
	int i = 0, sum = 0;
	char a[101];
	 while((n=getchar())!='\n')		//算出总和
    {
        sum+=n-48;						         
    }				
	int div, ten, hun, tho;			//笨办法,将总和各位数分别表示
	div = sum % 10;					//个位
	sum /= 10;					
	ten = sum % 10;					//十位.....
	sum /= 10;
	hun = sum % 10;
	sum /= 10;
	tho = sum % 10;
	switch (tho)					//switch输出对应拼音
	{
	case 0:break;					//千位数为0则只有三位,不输出
	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;
	}
	switch (hun)
	{
	case 0:
		if (tho == 0)   //千位百位都为0,则只有两位,不输出						
			tho = 0; //凑个整语句					
		else   //千位补位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;
	}
	switch (ten)
	{
	case 0:
		if (tho == 0 && hun == 0)		//同上
			tho = 0;
		else
			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;
	}
	switch (div)
	{
	case 0:						//n为自然数,不可能sum=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;
	}
	return 0;
}

优化后(大佬思路):
使用字符串或二维数组表示拼音
利用c语言中printf特性,进行对应输出
(看来printf的输出相较cout确实更好用)

#include<stdio.h>
int main()
{
	char py[][9] = { "ling","yi","er","san","si","wu","liu","qi","ba","jiu" };
	char n;
	int sum = 0;
	while ((n = getchar()) != '\n')
	{
		sum += n - 48;
	}
	int a[100], t = 0;				//int数组a不需留一个空,a[100]即可
	while (sum)
	{
		a[t] = sum % 10;
		sum /= 10;
		t++;
	}

	for (; t != 0; t--)
	{
		printf("%s", py[a[t - 1]]);	//将二维字符数组按顺序当作一维表示输出
		if (t != 1)printf(" ");       //t=0时是最后一位,不需输出“ ”
	}
}
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-07-29 23:23:10  更:2021-07-29 23:23:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年4日历 -2024/4/28 10:40:29-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码