NYOJ1092 数字分隔(二)

数字分隔(二)

时间限制:1000 ms  |  内存限制:65535 KB

难度:3

描述

在一个遥远的国家,银行为了更快更好的处理用户的订单,决定将一整串的数字按照一定的规则分隔开来,分隔规则如下:

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)
上传者
ACM_孙毓阳
#include <stdio.h>
#include <string.h>

#define maxn 110

char buf[maxn];

int main() {
    int sign, left, dot, i, len;
    char *ch;
    while(scanf("%s", buf + 1) != EOF) {
        sign = 0;
        buf[0] = '0';
        if(buf[1] == '-') {
            sign = 1;
            buf[1] = '0';
        }
        len = strlen(buf);
        if(ch = strchr(buf, '.')) {
            dot = ch - buf;
        } else dot = len;

        // 以下处理进位
        if(len - dot > 3) {
            if(buf[dot+3] > '4') {
                if(++buf[dot+2] > '9') {
                    buf[dot+2] = '0';
                    if(++buf[dot+1] > '9') {
                        buf[dot+1] = '0';
                        ++buf[dot-1];
                    }
                }
                i = dot - 1;
                while(buf[i] > '9') {
                    buf[i--] = '0';
                    ++buf[i];
                }
            }
            buf[dot+3] = '\0';
        } else if(len - dot == 2) {
            buf[len++] = '0';
            buf[len] = '\0';
        } else if(len - dot == 1) {
            buf[len++] = '0';
            buf[len++] = '0';
            buf[len] = '\0';
        } else if(len - dot == 0) {
            buf[len++] = '.';
            buf[len++] = '0';
            buf[len++] = '0';
            buf[len] = '\0';
        }

        // printf("%s...\n", buf);

        // 以下去前导零
        for(left = 0; buf[left] == '0'; ++left)
            ;

        // 输出整数部分
        if(buf[left] == '.') --left;
        if(sign) putchar('(');
        while(left < dot) {
            putchar(buf[left++]);
            if(left != dot && (dot - left) % 3 == 0)
                putchar(',');
        }
        // 输出小数部分
        printf("%s", buf + dot);
        if(sign) putchar(')');
        putchar('\n');
    }
    return 0;
}
时间: 2024-10-10 23:32:08

NYOJ1092 数字分隔(二)的相关文章

数字分隔(二)

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

Java基于opencv实现图像数字识别(二)—基本流程

Java基于opencv实现图像数字识别(二)-基本流程 做一个项目之前呢,我们应该有一个总体把握,或者是进度条:来一步步的督促着我们来完成这个项目,在我们正式开始前呢,我们先讨论下流程. 我做的主要是表格中数字的识别,但这个不是重点.重点是通过这个我们可以举一反三,来实现我们自己的业务. 图像的识别主要分为两步:图片预处理和图像识别:这两步都很重要 图像预处理: 1. 图像灰度化:二值化 2. 图像降噪,去除干扰线 3. 图像腐蚀.膨胀处理 4. 字符分割 5. 字符归一化 图像识别: 1.

CDOJ 1260 火柴棍数字(二)

Fish是一条生活在海里的鱼,有一天他很无聊,于是他去捡了人类扔进海里的垃圾,打算用这些来玩些什么. 他从捡回来的垃圾堆里找到了n根火柴棍,他想把这些火柴棍拼成一个长度为m的十进制数,每个数字的拼法如下图所示. 他想拼出来的数尽量大,这该怎么拼呢? 聪明的你,肯定知道该如何利用这n根木棒得到最大的m位数. 那就快告诉Fish吧~ 当然,不能有前导0哦. 而且木棍得全部用完! Input 第一行输入两个整数,n,m 满足 1<=n,m<=105 Output 将这m位数输出 如果不能得到任何一个

面试题:找出数组中只出现一次的数字(二)

难度:中等 一个整数数组,除了一个数之外所有数字都出现了3次,找出这个数字来. 注意: 你的算法应该是线性运行复杂度,且不能使用额外内存空间. 答案: public class Solution { public int singleNumber(int[] nums) { int ones = 0, twos = 0, threes = 0; for (int i = 0; i < nums.length; i++) { // twos holds the num that appears t

[LeetCode] Single Number II 单独的数字之二

Given an array of integers, every element appears three times except for one. Find that single one. Note:Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory? 这道题是之前那道单独的数字的延伸,那道题的解法就比较独特,是利用计算机按位储

Python 学习笔记(四)数字(二)

Python Python2 中除法的问题 1 >>> 3 / 6 2 0 3 >>> 3.0 / 6 4 0.5 5 >>> 3.0 / 6.0 6 0.5 7 >>> 5 / 2 8 2 9 >>> 6.0 / 3 10 2.0 11 >>> 10.0 / 3 12 3.3333333333333335 13 >>> 0.2 +0.9 14 1.1 15 >>>

Java从零开始学二十七(NumberFormat类)

一.NumberFormat表示数字的格式化类 NumberFormat表示数字的格式化类,即:可以按照本地的风格习惯进行数字的显示. No. 方法 类型 描述 1 public static Locale[] getAvailableLocales() 普通 返回所有语言环境的数组 2 public static final NumberFormat getInstance() 普通 返回当前默认语言环境的数字格式 3 public static NumberFormat getInstanc

微信二维码带参数的二维码(转)

官方文档地址:https://mp.weixin.qq.com/wiki/18/28fc21e7ed87bec960651f0ce873ef8a.html 原文地址:http://jingyan.baidu.com/article/fdbd4277cfd0c6b89f3f485f.html 注意事项 我知道你们是没有心情看注意事项的,但是很重要,所以我先摆上来. 用户扫描带参数的二维码,可能推送以下两种事件: 1.如果用户还未关注公众号,则用户可以关注公众号,关注后微信会将带场景值关注事件推送给

给定一个整数,求解该整数最少能用多少个Fib数字相加得到

一,问题描述 给定一个整数N,求解该整数最少能用多少个Fib数字相加得到 Fib数列,就是如: 1,1,2,3,5,8,13.... Fib数列,满足条件:Fib(n)=Fib(n-1)+Fib(n-2)   Fib(0)=1   Fib(1)=1:Fib数字,就是Fib数列中的某个数. 比如70 = 55+13+2,即一共用了3个fib数字得到 二,问题求解 ①求出所有小于等于N的Fib数字 //获得小于等于n的所有fib数 private static ArrayList<Integer>