PTA1002 写出这个数 (20 分)
1002 写出这个数 (20 分)
读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。
输入格式:
每个测试输入包含 1 个测试用例,即给出自然数 n 的值。这里保证 n 小于 10100。
输出格式:
在一行内输出 n 的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后一个拼音数字后没有空格。
输入样例:
1234567890987654321123456789
输出样例:
yi san wu
C算法实现:
#include<stdio.h>
int main(){
    int sum=0,k=0,sum1,s[15];
    char ch;
    //每次读取一个数
    ch = getchar();
    while(ch!='\n'){
        switch(ch){
        case '1':sum=sum+1;break;
        case '2':sum=sum+2;break;
        case '3':sum=sum+3;break;
        case '4':sum=sum+4;break;
        case '5':sum=sum+5;break;
        case '6':sum=sum+6;break;
        case '7':sum=sum+7;break;
        case '8':sum=sum+8;break;
        case '9':sum=sum+9;break;
        case '0':sum=sum+0;break;
    }
    ch = getchar();
    }
    //printf("%d",sum);
    sum1=sum;
    //判断是几位数
    while(sum1){
        sum1=sum1/10;
        k++;
    }
    for(int i=k-1;i>=0;i--){
        s[i]=sum%10;//分别求每位数
        sum=sum/10;
    }
        for(int i=0;i<k;i++){
            switch(s[i]){
                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;
                case 0:printf("ling");break;
        }
        if(i!=(k-1))
        {printf(" ");}
        else{
            printf("\n");
        }
    }
return 0;
}
思想:由于输入的数可达10的100次方,所以用数组存储不现实,因此可将数字作为字符输入,用getchar方法循环获取一个数,当获取到的字符为回车(‘\n’)时停止,再用switch进行判断,即可求出所有数之和,定义一个k来标记是几位数,再用数组存储每一位上的数字,最后对应字符串输出
算法二(一点点小改进,C++实现):
#include<bits/stdc++.h>//通用懒人写法,包含所有的库函数,由于本人还没来得及系统学习stl,也一般不会						//涉及到高级的库函数,所以就这么写了,建议还是系统学习stl
using namespace std;
int main(){
    string n;
    cin>>n;
    int i=0,sum=0,sum1,k=0,s[10];
    while(n[i]!='\0'){
        sum=sum+(n[i]-'0');
        i++;
    }
    //cout<<sum;
    sum1=sum;
    //判断是几位数
    while(sum1){
        sum1=sum1/10;
        k++;
    }
    for(int i=k-1;i>=0;i--){
        s[i]=sum%10;//分别求每位数
        sum=sum/10;
    }
        for(int i=0;i<k;i++){
            switch(s[i]){
                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;
                case 0:cout<<"ling";break;
        }
        if(i!=(k-1))
        {cout<<" ";}
        else{
           cout<<endl;
        }
        }
return 0;
}
思想:将要输入的变量定义为一个字符串,当输入的字符为‘\0’,也就是回车时,结束输入(‘\0’获取不到),所得的字符串可以直接作为数组使用,通过下标获取元素,当所得字符为数字时,可以用s[i]-'0'将数字字符转化为int类型的数字进行四则运算。
算法三(贴一个大佬的简洁代码,供参考学习)
#include <iostream>
using namespace std;
int main()
{
	int sum = 0;
	char ch, s[4];                       //ch作为临时变量保存输入的每一个字符,s保存sum的每一个数字 ,因为题目小于1000
	char b[10][5] = { "ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu" };
	while ((ch = getchar()) != '\n')    //如果一直输入字符,不按回车的话
		sum += (ch - '0');
	sprintf_s(s, "%d", sum);              // sprintf(char *buffer, const char *format,[ argument])将任意类型数据按某种格式转换成字符串
	for (int i = 0; s[i] != 0; i++) {
		if (i > 0) //消除第一个空格
			printf(" ");
		printf("%s", b[s[i] - '0']);
	}
	return 0;//上文sprintf中s为s[4]数组名,将sum的值存放在s中
}
几点思考:
可以把相应的格式字符串存储到字符数组中,char b【10】【5】中的5代表最大长度(10行5列)
本题的精华所在,之前的做法都是想着判断所得到的数是几位数,再如何把每位上的数字存下来,所以用了for循环判断,而c++的库函数sprintf_s()提供了这个功能,不过有以下注意点(感谢评论大佬!!!):
- 带“_s”后缀的函数一般是为了让原版函数更安全,编译器(如VS)提供了sprintf_s()的话,不会出现编译错误,而PAT应该是没有提供的,所以需要去掉“_s”后缀。
 - 但是在vs里反而是sprintf不让用,一定要你用sprintf_s
 
可用%s直接输出字符数组中的所有字符
PTA1002 写出这个数 (20 分)的更多相关文章
- PAT Basic 1002 写出这个数 (20 分)
		
读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字. 输入格式: 每个测试输入包含 1 个测试用例,即给出自然数 n 的值.这里保证 n 小于 1. 输出格式: 在一行内输出 n 的 ...
 - 1002 写出这个数 (20 分) java解题
		
读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字. 输入格式: 每个测试输入包含 1 个测试用例,即给出自然数 n 的值.这里保证 n 小于 10^100. 输出格式: 在一行内输 ...
 - PAT-字符串处理-B 1002 写出这个数 (20分)
		
题目: 思路: 先用字符串数组存储输入数字,然后依据num[i]-'0'对输入数字求和.然后对求和后的数字,进行分割,存储到数组中,然后遍历数组,依据存储汉语拼音的字符串二维数组进行输出 注意点: 注 ...
 - PAT 1002 写出这个数 (20)(代码)
		
1002 写出这个数 (20)(20 分) 读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字. 输入格式:每个测试输入包含1个测试用例,即给出自然数n的值.这里保证n小于10^100 ...
 - PAT乙级  1002. 写出这个数 (20)
		
1002. 写出这个数 (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 读入一个自然数n,计算其各位数字 ...
 - PAT-乙级-1002. 写出这个数 (20)
		
1002. 写出这个数 (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 读入一个自然数n,计算其各位数字 ...
 - [C++]PAT乙级1002.写出这个数(20/20)
		
/* 1002. 写出这个数 (20) 读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字. 输入格式:每个测试输入包含1个测试用例,即给出自然数n的值.这里保证n小于10^100. ...
 - 【PAT】1002. 写出这个数 (20)
		
1002. 写出这个数 (20) 读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字. 输入格式:每个测试输入包含1个测试用例,即给出自然数n的值.这里保证n小于10100. 输出格式 ...
 - PAT 乙级练习题1002. 写出这个数 (20)
		
1002. 写出这个数 (20) 读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字. 输入格式:每个测试输入包含1个测试用例,即给出自然数n的值.这里保证n小于10100. 输出格式 ...
 - PAT 1002. 写出这个数 (20)
		
读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字. 输入格式:每个测试输入包含1个测试用例,即给出自然数n的值.这里保证n小于10100. 输出格式:在一行内输出n的各位数字之和的每 ...
 
随机推荐
- Vue 数组响应
			
响应渲染 在Vue中,被渲染的数据都是响应式的,即Vue实例中进行改变页面中也会跟着改变: <body> <div id="app"> <p>{ ...
 - 从零搭建hadoop集群之mysql安装
			
Linux RPM 方式安装 MySQL在 hadoop02机器上 1. 安装新版mysql前,需将系统自带的mariadb-lib卸载 [root@hadoop02 ~]# rpm -qa|grep ...
 - 百题计划-4 codeforces 652 div2 D. TediousLee 找规律
			
https://codeforces.com/contest/1369/problem/D n<=2e6,所以只要找递推式就可以了,不需要找快速幂 /** */ #include<bits ...
 - Pods与Nodes
			
Pod是Kubernetes抽象出来表示一组应用容器(比如Docker.rkt),还有这些容器共享的资源.这些资源包括: 共享存储,比如Volumes 网络,比如独立的集群IP地址 如何去运行每个容器 ...
 - 在集群上运行Spark应用
			
初识Spark真的存在很多疑问:Spark需要部署在集群里的每个节点上吗?Spark怎么有这么多依赖,这些依赖分别又有什么用?官网里边demo是用sbt构建的,难道还有再学一下sbt吗? --就是这么 ...
 - npm i不成功devDependencies解决方法
			
npm config ls -l 查看npm配置发现production为true,所以i不成功 npm config set production false 将production设置为false ...
 - HTML基础知道了解
			
第1章 Html介绍 1.Html和CSS的关系 1.1 学习web前端开发基础技术需要掌握:HTML.CSS.JavaScript语言.下面我们就来了解下这三门技术都是用来实现什么的: 1.2 HT ...
 - 移动端性能测试--CPU资源
			
一.背景 在很多场景下我们去使用 App,可能会碰到手机会出现发热发烫的现象.这是因为 CPU 使用率过高.CPU 过于繁忙,会使得整个系统无法响应用户,整体性能降低,用户体验变得相当差,也容易引起 ...
 - PyMySQL查询
			
title: PyMySQL查询 author: 杨晓东 permalink: PyMySQL查询 date: 2021-10-02 11:27:04 categories: - 投篮 tags: - ...
 - WPF实现一个简单自定义管道
			
先看效果 xaml代码 <UserControl x:Class="WPF控件测试.Control.Pipeline" xmlns="http://schemas ...