NYIST 1092 数字分隔(二)

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

本文主要是介绍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

相关文章

从去中心化到智能化:Web3如何与AI共同塑造数字生态

在数字时代的演进中,Web3和人工智能(AI)正成为塑造未来互联网的两大核心力量。Web3的去中心化理念与AI的智能化技术,正相互交织,共同推动数字生态的变革。本文将探讨Web3与AI的融合如何改变数字世界,并展望这一新兴组合如何重塑我们的在线体验。 Web3的去中心化愿景 Web3代表了互联网的第三代发展,它基于去中心化的区块链技术,旨在创建一个开放、透明且用户主导的数字生态。不同于传统

usaco 1.2 Name That Number(数字字母转化)

巧妙的利用code[b[0]-'A'] 将字符ABC...Z转换为数字 需要注意的是重新开一个数组 c [ ] 存储字符串 应人为的在末尾附上 ‘ \ 0 ’ 详见代码: /*ID: who jayLANG: C++TASK: namenum*/#include<stdio.h>#include<string.h>int main(){FILE *fin = fopen (

AIGC6: 走进腾讯数字盛会

图中是一个程序员,去参加一个技术盛会。AI大潮下,五颜六色,各种不确定。 背景 AI对各行各业的冲击越来越大,身处职场的我也能清晰的感受到。 我所在的行业为全球客服外包行业。 业务模式为: 为国际跨境公司提供不同地区不同语言的客服外包解决方案,除了人力,还有软件系统。 软件系统主要是提供了客服跟客人的渠道沟通和工单管理,内部管理跟甲方的合同对接,绩效评估,BI数据透视。 客服跟客人

NC 把数字翻译成字符串

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 描述 有一种将字母编码成数字的方式:‘a’->1, ‘b->2’, … , ‘z->26’。 现在给一串数字,返回有多少种可能的译码结果 import java.u

34465A-61/2 数字万用表(六位半)

34465A-61/2 数字万用表(六位半) 文章目录 34465A-61/2 数字万用表(六位半)前言一、测DC/AC电压二、测DC/AC电流四、测电阻五、测电容六、测二极管七、保存截图流程 前言 1、6位半数字万用表通常具有200,000个计数器,可以显示最大为199999的数值。相比普通数字万用表,6位半万用表具有更高的测量分辨率和更高的测量准确度,适用于精度比较高的测

超级 密码加密 解密 源码,支持表情,符号,数字,字母,加密

超级 密码加密 解密 源码,支持表情,符号,数字,字母,加密 可以将表情,动物,水果,表情,手势,猫语,兽语,狗语,爱语,符号,数字,字母,加密和解密 可以将文字、字母、数字、代码、标点符号等内容转换成新的文字形式,通过简单的文字以不同的排列顺序来表达不同的内容 源码截图: https://www.httple.net/152649.html

两个长数字相加

1.编程题目 题目:要实现两个百位长的数字直接相加 分析:因为数字太长所以无法直接相加,所以采用按位相加,然后组装的方式。(注意进位) 2.编程实现 package com.sino.daily.code_2019_6_29;import org.apache.commons.lang3.StringUtils;/*** create by 2019-06-29 19:03** @autho

关于字符串转化为数字的深度优化两种算法

最近在做项目,在实际操作中发现自己在VC环境下写的字符串转化为整型的函数还是太过理想化了,或者说只能在window平台下软件环境中运行,重新给大家发两种函数方法: 第一个,就是理想化的函数,在VC环境下充分利用指针的优越性,对字符串转化为整型(同时也回答了某位网友的答案吖),实验检验通过: #include <stdio.h> #include <string.h> int rayatoi(c

Oracle 数据库中 字符型字段 按数字排序

由于需要维护表里面的值,id主键是字符串型,保存的都是数字,每次都要看好久,才知道新增id,用哪个数字; 遇到了一个主键排序的问题。字符型的主键,保存的都是数字,数据导过来以后发现数据排序都是乱的,就想着按数字规则排序。 但发现to_number总是报错,就想着里面应该是有字符存在。后来使用了正则关系式,问题解决。 以下是正则关系式的两种用法,记录下来: 方法一: select * fr

知名AIGC人工智能专家培训讲师唐兴通谈AI大模型数字化转型数字新媒体营销与数字化销售

在过去的二十年里,中国企业在数字营销领域经历了一场惊心动魄的变革。从最初的懵懂无知到如今的游刃有余,这一路走来,既有模仿学习的艰辛,也有创新突破的喜悦。然而,站在人工智能时代的门槛上,我们不禁要问:下一个十年,中国企业将如何在数字营销的浪潮中乘风破浪? 一、从跟风到精通:中国数字营销的进化史 回顾过去,中国企业在数字营销领域的发展可谓是一部"跟风学习"的编年史。从最初的搜索引擎营销(SEM),