NYIST 1092 数字分隔(二)

2024-06-24 03:32
文章标签 nyist 1092 分隔 数字

本文主要是介绍NYIST 1092 数字分隔(二),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 本题是南阳理工学院ACM网站上的一道字符串处理题,很长时间不敲代码了手生得很,果然码了很长时间~


描述

    在一个遥远的国家,银行为了更快更好的处理用户的订单,决定将一整串的数字按照一定的规则分隔开来,分隔规则如下:1、实数的整数部分按照每三个数字用逗号分隔开(整数部分的高位有多余的0时,需先将多余的0过滤后,再进行数字分隔,如:0001234567 输出结果为1,234,567.00)2、小数部分保留两位小数(四舍五入)3、如果该数是负的,则在输出时需用括号将分隔后的数字括起来,例如:-10005.1645的输出结果为(10,005.16) 

输入

    多组测试数据,每行输入一个实数n(n的位数小于100)

输出

    输出分隔后的结果

样例输入

    00012345670.0000-10005.1645

样例输出

    1,234,567.000.00(10,005.16)

AC代码:

#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <algorithm>
using namespace std;int main()
{char str[201], a[201];while(~scanf("%s", a)) {bool neg = false;int ten = 0;if(a[0] == '-') {neg = true;a[0] = '0';printf("(");}int len = strlen(a);int point = 0;for(int i = 0 ; i < len; ++i) {if(a[i] == '.') {point = i;break;}}
//        printf("point = %d\n", point);if(point > 0) {//有小数前导零处理int i, j = 0;bool flg = true;for(i = 0; i < point-1; i++) {if(a[i] == '0' && flg) {continue;} else {str[j++] = a[i];flg = false;}}str[j++] = a[i];str[j++] = '.';for(i = point+1; i < len; i++) {str[j++] = a[i];}str[j] = '\0';} else {int j = 0;bool flg = true;for(int i = 0; i < len-1; i++) {if(a[i] == '0' && flg) {continue;} else {str[j++] = a[i];flg = false;}}str[j++] = a[len-1];str[j] = '\0';}
//        printf("~~~%s~~~\n", str);len = strlen(str);point = 0;for(int i = 0 ; i < len; ++i) {if(str[i] == '.') {point = i;if(i == len-1) {str[len] = str[len+1] = '0';str[len+2] = '\0';} else if(i == len-2) {str[len] = '0';str[len+1] = '\0';} else if(len-point-1 > 2) {if(str[point+3] >= '5' && str[point+3] <= '9') {if(str[point+2] != '9') {str[point+2] += 1;} else {char c = str[0];for(int t = point+2; t >= 0; t--) {if(str[t] == '.') {continue;}if(str[t] == '9') {str[t] = '0';} else {str[t] += 1;break;}}if((c == '9' && str[0] == '0')) {ten = 1;}}}str[i+3] = '\0';} else {str[i+3] = '\0';}}}if(ten) {printf("1");if(point%3 == 0) {printf(",");}}if(point > 0) {//有小数if(point <= 3) {printf("%s", str);} else {int i;int head = point%3;int cnt = 0;;for(i = 0; i < head; i++) {printf("%c", str[i]);cnt = 3;}//            printf("-!%d  %d!-\n", cnt, i);for( ; i < point; i++) {if(cnt == 3) {cnt = 0;printf(",");}printf("%c", str[i]);cnt++;}if(point > 0) {printf(".");}printf("%c%c", str[point+1], str[point+2]);}} else {//整数int i, head = len%3;int cnt = 0;;for(i = 0; i < head; i++) {printf("%c", str[i]);cnt = 3;}for( ; i < len; i++) {if(cnt == 3) {cnt = 0;printf(",");}printf("%c", str[i]);cnt++;}printf(".00");}if(neg) {printf(")");}printf("\n");}return 0;
}

测试样例:

999999999.999999

-999999999.999999

这篇关于NYIST 1092 数字分隔(二)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1089056

相关文章

捷瑞数字业绩波动性明显:关联交易不低,募资必要性遭质疑

《港湾商业观察》施子夫 5月22日,山东捷瑞数字科技股份有限公司(以下简称,捷瑞数字)及保荐机构国新证券披露第三轮问询的回复,继续推进北交所上市进程。 从2023年6月递表开始,监管层已下发三轮审核问询函,关注到捷瑞数字存在同业竞争、关联交易、募资合理性、期后业绩波动等焦点问题。公司的上市之路多少被阴影笼罩。​ 业绩波动遭问询 捷瑞数字成立于2000年,公司是一家以数字孪生驱动的工

数据时代的数字企业

1.写在前面 讨论数据治理在数字企业中的影响和必要性,并介绍数据治理的核心内容和实践方法。作者强调了数据质量、数据安全、数据隐私和数据合规等方面是数据治理的核心内容,并介绍了具体的实践措施和案例分析。企业需要重视这些方面以实现数字化转型和业务增长。 数字化转型行业小伙伴可以加入我的星球,初衷成为各位数字化转型参考库,星球内容每周更新 个人工作经验资料全部放在这里,包含数据治理、数据要

剑指offer(C++)--和为S的两个数字

题目 输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。 class Solution {public:vector<int> FindNumbersWithSum(vector<int> array,int sum) {vector<int> result;int len = array.size();if(

剑指offer(C++)--数组中只出现一次的数字

题目 一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。 class Solution {public:void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) {int len = data.size();if(len<2)return;int one = 0;for(int i

神经网络第四篇:推理处理之手写数字识别

到目前为止,我们已经介绍完了神经网络的基本结构,现在用一个图像识别示例对前面的知识作整体的总结。本专题知识点如下: MNIST数据集图像数据转图像神经网络的推理处理批处理  MNIST数据集          mnist数据图像 MNIST数据集由0到9的数字图像构成。像素取值在0到255之间。每个图像数据都相应地标有“7”、“2”、“1”等数字标签。MNIST数据集中,

江西电信联合实在智能举办RPA数字员工培训班,培养“人工智能+”电信人才

近日,江西电信与实在智能合作的2024年数字员工开发应用培训班圆满闭幕。包括省公司及11个分公司的核心业务部门,超过40名学员积极报名参与此次培训,江西电信企业信息化部门总监徐建军出席活动并致辞,风控支撑室主任黄剑主持此次培训活动。 在培训会开幕仪式上,徐建军强调,科创是电信企业发展的核心动力,学习RPA技术是实现数字化转型的关键,他阐述了RPA在提高效率、降低成本和优化资源方面的价值,并鼓励学

LeetCode —— 只出现一次的数字

只出现一次的数字 I  本题依靠异或运算符的特性,两个相同数据异或等于0,数字与0异或为本身即可解答。代码如下: class Solution {public:int singleNumber(vector<int>& nums) {int ret = 0;for (auto e : nums){ret ^= e;}return ret;}};  只出现一次的数字 II

人工智能在数字病理切片虚拟染色以及染色标准化领域的研究进展|顶刊速递·24-06-23

小罗碎碎念 本期推文主题:人工智能在数字病理切片虚拟染色以及染色标准化领域的研究进展 这一期的推文是我发自内心觉得为数不多,特别宝贵的一篇推文,原因很简单——可参考的文献相对较少&方向非常具有研究意义&现在不卷。 数字病理方向的老师/同学应该清楚,不同中心提供的切片,染色方案是存在差异的,并且还存在各种质量问题,所以我们在数据预处理的时候,通常会先对切片的质量执行一遍筛选,然后再进行染

B站大模型指令微调入门实战(完整代码),一键打造你的数字分身

前两天,想导出微信聊天记录,于是搞了个小工具。 感兴趣的小伙伴,可以回看: 微信聊天记录导出为电脑文件实操教程(附代码) 一键获取所有微信聊天记录(附PyQT6入门实战) 拿到这些数据都有什么用? 突发奇想:如果把微信上,所有和我相关的聊天对话提取出来,再结合大语言模型 LLM,是不是就可以打造我的数字分身了? 选择一个基座大模型,通过指令微调的方式,打造个性化AI Bot,不失为

php字符串计算汉字、中英文数字个数

$str = '123abcDEF测试的事发地点';$length = strlen(preg_replace('/[\x00-\x7F]/', '', $str));$arr['en'] = strlen( $str) - $length; //(非中文)$arr['cn'] = intval($length / 3); // 编码GBK,除以2 (中文)print_r($