写出这个数

news2024/11/16 1:31:44

目录

1002:写出这个数

输入格式:

输出格式:

输入样例:

输出样例:

代码长度限制

时间限制

内存限制

思路:

  1.求和

  1.2代码:

  2.找到sum的每一位

  2.2代码:

  3.汉语拼音输出数字

  3.2代码:

完整代码:

时间复杂度:

总结:

题目链接:


1002:写出这个数

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

输入格式:

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

输出格式:

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

输入样例:

1234567890987654321123456789

输出样例:

yi san wu

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

思路:

  1.求和

  我们做这道题的第一步,就是要求出输入的字符串中数字你字符的和,那这怎么求呢?

  很好办,我们初始定义一个int类型变量sum,依次遍历字符串数组,将当前字符加到sum里面,但是这个字符是char类型的,就算系统默认转化成了int类型,也是ASCII码格式的,完全不是之前的那个数字字符.

  我们知道,ASCII中,数字字符0,1,2......的ASCII码是相差为1的,也就是说,这些数字字符的ASCII码-'0'的ASCII码就可以等于正确的数字字符,和我们之前讲的求字母序号一样,减去'A'.

  这样我们求到了字符串的数字字符和sum.

  1.2代码:

	char a[101];//字符串 
	cin>>a;  //输入这个字符串 
	int sum=0; //字符串a的数字字符和 
	int t=strlen(a); //求字符串a的长度 
	for(int i=0;i<t;i++) //遍历a字符串 
	  sum+=a[i]-'0'; //求字符串a的和 

  2.找到sum的每一位

  我们可以写一个函数来解决:

  我们首先先求出sum是一个几位的数字:

    不断的while循环,知道r等于0为止(r在最开始赋值为sum),期间将r/=10(将r除以10),然后将计数器t不断的++.

    这样,t就是sum的数字长度了.

  接下来我们就可以用一个数组nums来存sum的每一位了,怎么存呢?

  我们知道sum的位数了,就可以用一个函数来求sum的当前位置的数是多少:

    首先,函数参数是t和n,t默认为10,n就代表sum的位数,如果n为1位的话,那么当前位最小是1,就返回1,如果n为2位的话,就返回10,在n以上的话,利用while循环,判断返回多少,就是求t的n-1次方是多少,将其返回.

  返回之后呢?我们的nums数组,就可以进行存储,我们存储什么呢?难道存储函数里面返回的10的n-1次方吗?

  我们知道,求sum的每一位,我们需要再次除以这个函数的返回值,比如说sum是135,长度为3,用函数运算,返回值是10^(3-1)=100,将135/100=1,就是sum的第一位,之后将sum赋值为sum除以函数返回值的余数,在这里,sum=sum%100=35;然后循环处理,目前长度为2,返回值是10,35/10=3,是sum的第二位,这样依次下去,直到长度为0为止.

  经过这样的操作,nums里面存的就是sum正序数字的每一位了.

  2.2代码:

int check(int t,int n){ //求t的n-1次方 
	int r=t;
	if(n==1) //长度为1 
	  return 1; //就返回1 
	else if(n==2) //长度为2 
	  return t; //返回10 
	else if(n>2){ //如果长度大于了2 
		while(n>2){ //不断*10 
			r*=t; //*10
			n--; //长度减1 
		}
	}
	return r;//返回t的n-1次方 
}
int get(int t,int nums[]){ //求t的长度 
	int tl=0,t1=t; //tl是sum的长度,t1赋值为t 
	while(t1>0){ //找t的长度 
		t1/=10; //不断的除以10 
		tl++; //长度++ 
	}
	for(int i=0;i<tl;i++){ //求出t的每一位数字到nums里面 
		nums[i]=t/check(10,tl-i); //赋值 
		t=t%check(10,tl-i); //除余 
	}
	return tl; //返回长度 
}

  3.汉语拼音输出数字

  计算完了sum的各位数字,我们需要按照题目要求汉语拼音输出了!

  可以写一个函数,参数为一个int类型的整数:

    如果为0,输出....

    如果为1,输出....

    ......

    如果为9,输出"jiu";

  这样遍历nums的时候,带入这个函数,就可以汉语拼音输出了!

  因为题目说了行末不能有多余的空格,所以我们需要特判一下!

  3.2代码:

void pd(int c,int j,int i){ //汉语拼音输出数字 
	if(c==1)
	  cout<<"yi";
	else if(c==2)
	  cout<<"er";
	else if(c==3)
	  cout<<"san";
	else if(c==4)
	  cout<<"si";
	else if(c==5)
	  cout<<"wu";
	else if(c==6)
	  cout<<"liu";
	else if(c==7)
	  cout<<"qi";
	else if(c==8)
	  cout<<"ba";
	else if(c==9)
	  cout<<"jiu";
	else if(c==0)
	  cout<<"ling";
	if(j!=i) //行末不能有多余空格的特判 
	  cout<<" ";
} 

完整代码:

#include<bits/stdc++.h>
using namespace std;
int check(int t,int n){ //求t的n-1次方 
	int r=t;
	if(n==1) //长度为1 
	  return 1; //就返回1 
	else if(n==2) //长度为2 
	  return t; //返回10 
	else if(n>2){ //如果长度大于了2 
		while(n>2){ //不断*10 
			r*=t; //*10
			n--; //长度减1 
		}
	}
	return r;//返回t的n-1次方 
}
int get(int t,int nums[]){ //求t的长度 
	int tl=0,t1=t; //tl是sum的长度,t1赋值为t 
	while(t1>0){ //找t的长度 
		t1/=10; //不断的除以10 
		tl++; //长度++ 
	}
	for(int i=0;i<tl;i++){ //求出t的每一位数字到nums里面 
		nums[i]=t/check(10,tl-i); //赋值 
		t=t%check(10,tl-i); //除余 
	}
	return tl; //返回长度 
}
void pd(int c,int j,int i){ //汉语拼音输出数字 
	if(c==1)
	  cout<<"yi";
	else if(c==2)
	  cout<<"er";
	else if(c==3)
	  cout<<"san";
	else if(c==4)
	  cout<<"si";
	else if(c==5)
	  cout<<"wu";
	else if(c==6)
	  cout<<"liu";
	else if(c==7)
	  cout<<"qi";
	else if(c==8)
	  cout<<"ba";
	else if(c==9)
	  cout<<"jiu";
	else if(c==0)
	  cout<<"ling";
	if(j!=i) //行末不能有多余空格的特判 
	  cout<<" ";
} 
int main(){
	char a[101];//字符串 
	cin>>a;  //输入这个字符串 
	int sum=0; //字符串a的数字字符和 
	int t=strlen(a); //求字符串a的长度 
	for(int i=0;i<t;i++) //遍历a字符串 
	  sum+=a[i]-'0'; //求字符串a的和 
	int s[10]; //s为sum的每一位数字 
	int i=0;
	i=get(sum,s)-1; //求出sum的长度 
	for(int j=0;j<=i;j++) //遍历 
	  pd(s[j],j,i); //输出 
	cout<<endl;
	return 0;
}

时间复杂度:

  说了n最多是10^100次方,那么说明n最多是100位,get函数的复杂度就是O(100);

  最后遍历输出的时间复杂度也是O(100),两者相加就是O(200),算是非常非常快的了!

总结:

  这道题考了学生们关于字符串处理,字符串转整数,整数求长度,求整数的每一位的应用,总的来说还是比较难的!

题目链接:

PTA | 程序设计类实验辅助教学平台千名教师建设,万道高质量题目,百万用户拼题的程序设计实验辅助教学平台https://pintia.cn/problem-sets/994805260223102976/exam/problems/994805324509200384

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/78662.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

通过MQ进行系统对接

消息要有来源系统&#xff0c;消息类型&#xff0c;收到消息的应用&#xff0c;通过url取数据。做一个开关&#xff0c;用户可以自己选择方案一和方案二。 方案一&#xff1a;A公司的消息中存json&#xff0c;供应链直接获取json 方案二&#xff1a;通过A公司消息中的UrL&…

Windows系统iis 和多界面怎么安装

Windows系统iis 和多界面怎么安装 服务器拿到手都是有iis&#xff08;iis&#xff1a;用于搭建网站&#xff09;和多界面&#xff08;多界面&#xff1a;用于同时多人操作服务器&#xff09; 但也有服务器是没有安装iis和多界面的&#xff0c;遇到这样的情况就手足无措了。 今…

实训任务5:ZooKeeper节点操作

文章目录一、实训目的二、实训要求三、实训任务四、完成任务&#xff08;一&#xff09;准备工作&#xff08;二&#xff09;实现步骤1、创建Maven项目2、添加相关依赖3、创建日志属性文件4、创建股票价格类&#xff08;1&#xff09;创建init()方法&#xff08;2&#xff09;创…

【python脚本】ICer的脚本入门训练——find_key

我们的目标是┏ (゜ω゜)☞芯片前端全栈工程师~喵&#xff01; 前言 往期回顾&#xff1a; 【python脚本】ICer的脚本入门训练——svn_back_尼德兰的喵的博客-CSDN博客_svn back文件 【python脚本】ICer的脚本入门训练——gen_tc_尼德兰的喵的博客-CSDN博客 查找关键词这一类脚…

TFT-LCD LVGL与硬件交互

TFT-LCD LVGL与硬件交互 屏幕能正常显示LVGL官方例程&#xff0c;说明LVGL移植成功了&#xff0c;本次实验使用屏幕通过LVGL控制开发板硬件 实现效果 用LVGL画两个按钮和一个标签&#xff0c;一个按钮控制蜂鸣器&#xff0c;另一个按钮控制继电器&#xff0c;标签显示“TFT-…

基于intel机器人控制器,支持slam,激光雷达和AI加速

9th/8th gen Intel Core™ i7/i5/i3 & Celeron.XM-5149 是专为机器人行业设计的工业计算机产品&#xff0c;高性能的处理能力加速 AI 学习速度&#xff0c;多种类 I/0 可接摄像头、雷达等丰富外设。在设备密闭舱体内&#xff0c;整机可以高温稳定运行不降速。 产品规格 芯…

flink不同部署方式-1.14

1. 版本说明 本文档内容基于 flink-1.14.x&#xff0c;其他版本的整理&#xff0c;请查看本人博客的 flink 专栏其他文章。 2. 概述 Flink 是一种通用性框架&#xff0c;支持多种不同的部署方式。 本章简要介绍 Flink 集群的组成部分、用途和可用实现。如果你只是想在本地启…

最全LaTeX 数学公式、字母符号、上下标、列表矩阵、公式注释、分数二进制数、分割字符、逻辑集合论、否定符号等

最全LaTeX 数学公式、字母符号、上下标、列表矩阵、公式注释、分数二进制数、分割字符、逻辑集合论、否定符号等 1. 公式示例 E(T)∑(p,q)ϵκ∣∣p−Tq∣∣2E(T)\sum_{(p,q)\epsilon\kappa} \mid\mid p-T_q \mid \mid ^2 E(T)(p,q)ϵκ∑​∣∣p−Tq​∣∣2 E(T)∑(p,q)ϵκ…

高数 |【23数一 李林六套卷】卷四 自用思路 及 知识点 整理

23数一 李林六套卷 —— 自用思路 及 知识点 整理 ——【卷一】 以下均为个人复盘。 T1:高阶无穷小 T6:傅里叶级数 法一:直接套傅里叶展开公式,死算 法二:用技巧。取一个x,看最后结果趋近于这个数!是趋近于!不是直接等于 直接等于不可以。再来看下一个。

Java--IO流详解

目录 一、IO流的介绍 二、IO流的具体详解 &#xff08;1&#xff09;字节流 1&#xff1a;FileOutputStream 2&#xff1a;FileInputStream &#xff08;2&#xff09;字符流 1&#xff1a;解码编码 2&#xff1a;FileReader 3&#xff1a;FileWriter 三、IO流的使用 …

MATLB|基于改进教学的优化算法(TLSBO)的最优功率优化

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️❤️&#x1f4a5;&#x1f4a5;&#x1f4a5; &#x1f4dd;目前更新&#xff1a;&#x1f31f;&#x1f31f;&#x1f31f;电力系统相关知识&#xff0c;期刊论文&…

使用 Zabbix 监控Oracle

zabbix ODBC 数据库监控 ODBC 是 C 语言开发的、用于访问数据库的中间件接口.zabbix 支持查询任何 ODBC 支持的数据库.zabbix 经过调用 ODBC 来获取数据库的数据以及数据库状态等等信息 一、安装unixODBC 官方主页:http://www.unixodbc.org/download.html 使用阿里巴巴提供的…

线性方程组迭代法

雅可比迭代法与高斯-塞德尔迭代法 雅可比迭代法 例一 {10x1−x2−2x37.2−x110x2−2x38.3−x1−x25x34.2\left\{\begin{array}{l} 10 x_{1}-x_{2}-2 x_{3}7.2 \\ -x_{1}10 x_{2}-2 x_{3}8.3 \\ -x_{1}-x_{2}5 x_{3}4.2 \end{array}\right. ⎩⎨⎧​10x1​−x2​−2x3​7.2−x…

Css-Grid布局(强大)

前言 我们前面讲的Flex布局是轴线布局&#xff0c;只能指定"项目"针对轴线的位置&#xff0c;可以看做是一维布局&#xff0c;Grid布局则是将容器划分成"行"和"列"&#xff0c;产生单元格&#xff0c;然后指定"项目所在"的单元格&…

从手动测试到自动化测试老司机,只用了3个月,我的薪资翻了一倍

虽然笔者是一个测试老人了&#xff0c;但是基本上所有的测试经验都停留在手工测试方面&#xff0c;对于自动化测试方面的实战经验少之又少&#xff0c;可以说&#xff0c;从这个角度来说&#xff0c;就像生活在原始社会&#xff0c;一切靠双手解决问题。&#xff08;别想歪了&a…

【深度学习】李宏毅2021/2022春深度学习课程笔记 - Deep Learning Introduction

文章目录一、深度学习的概念二、函数的类型三、深度学习的步骤3.1 定义一个参数未知的函数表达式3.2 定义一个损失函数3.3 采用梯度下降法求解使得函数表达式的Loss最小的参数四、视频播放量预测案例4.1 案例介绍和思路分析4.2 线性函数表达式14.3 改进1&#xff1a;使用前一段…

此文件存在危险因此chrome已将其拦截

当您尝试在 chrome 中下载一些文件时&#xff0c;有时 chrome 会说“此文件可能很危险&#xff0c;因此 Chrome 已阻止它”。这可能是因为 Chrome 的内置安全功能可能已将其检测为可能有害的文件。但是&#xff0c;如果您信任文件的来源并想要下载它&#xff0c;那么您可以按照…

authorization server client resource 使用1

authorization server && client && resource 使用1 OAuth2介绍 OAuth&#xff08;Open Authorization&#xff09;是一个关于授权&#xff08;authorization&#xff09;的开放网络标准&#xff0c;允许用户授权第三方应用访问他们存储在另外的服务提供者上…

leetcode.1691 堆叠长方体的最大高度 - dp + 排序

1691. 堆叠长方体的最大高度 目录 1、java 2、c 思路&#xff1a; 根据题目描述&#xff0c;长方体 j 能够放在长方体 i 上&#xff0c;当且仅当 题目允许旋转长方体&#xff0c;也就是可以选择长方体的任意一边作为长方体的高。 对于任意一种合法的堆叠&#xff0…

聊一聊三级等保

本文为joshua317原创文章,转载请注明&#xff1a;转载自joshua317博客 聊一聊三级等保 - joshua317的博客 一、前言 1.1 基本认知 网络安全&#xff1a;根据《信息安全技术网络安全等级保护基本要求》&#xff08;GB/T 22239-2019&#xff09;&#xff0c;是指通过采取必要措…