zoukankan      html  css  js  c++  java
  • ACM_给你100块钱

    给你100块钱

    Time Limit: 2000/1000ms (Java/Others)

    Problem Description:

    小光见到昨晚旭能神没拿到一血,又损失了一百块,很同情他。但是为了不表现出自己在同情他,于是对他说:“我最近碰到了难题,一直没有AC,如果你能第一个帮我AC掉,我就给你100块钱。题目就是:给定一个实数,输出它的相反数。”

    Input:

    输入包含多组测试数据,每组数据包含一个实数(100位以内)。输入的数据最多只包含一个负号。

    Output:

    对于每组数据,输出它的相反数,占一行。

    Sample Input:

    0
    -0.1
    00.10

    Sample Output:

    0
    0.1
    -0.1
    解题思路:处理字符串,各种情况要面面俱到。很容易想到,用另外的数组a来保存相反数,每一次输入都将a数组元素全部赋为'',这有利于直接输出最后的新字符串。先判断第一个字符是否为'-',是的话先用flag标记true,然后去掉前导0,之后要判断i==len?表示全部为0(包含'-'、'+'、'.',但其实表示的是0)接下来判断是否有小数点,有点话就去掉尾部的0。剩下的分4种情况:
    一、当s[i]!='.'时,如果flag为false,则a[k++]='-'先标记负号;①如果s[j]!='.',直接从i~j拷贝给a数组;②否则,先--j,去掉多余的'.',对剩下的整数部分进行拷贝;
    二、当s[i]=='.'时,同样如果flag为false,则a[k++]='-'先标记为负号;③如果s[j]!='.',先把0给整数部分,接下来直接拷贝i~j即可;④否则说明此时相当于0,直接a[k]='0'即可。
    AC代码:
     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 bool ispoint(char ch[],int len){  //用来判断是否有小数点,这样才可以去掉尾部多余的0
     4     for(int i=0;i<len;++i)
     5         if(ch[i]=='.')return true;
     6     return false;
     7 }
     8 int main()
     9 {
    10     char s[110],a[110];
    11     int i,j,k,len;
    12     bool flag;
    13     while(cin>>s){
    14         memset(a,'',sizeof(a));
    15         k=i=0;len=strlen(s);flag=false;
    16         if(s[i]=='-'){flag=true;++i;}
    17         while(s[i]=='0')++i;
    18         if(i==len){   //判断是否都为0的情况
    19             cout<<"0"<<endl;  //是的话直接输出0
    20             continue;  //继续输入
    21         }
    22         j=len-1;
    23         if(ispoint(s,len)){  //有小数点的话才去掉后导0
    24             while(s[j]=='0')--j;
    25         }
    26         if(s[i]!='.'){
    27             if(!flag)a[k++]='-';
    28             if(s[j]!='.'){
    29                 while(i<=j)a[k++]=s[i++];
    30             }
    31             else{
    32                 --j;
    33                 while(i<=j)a[k++]=s[i++];
    34             }
    35         }
    36         else{  //表示当前为'.'
    37             if(s[j]!='.'){
    38                 if(!flag)a[k++]='-';
    39                 a[k++]='0';
    40                 while(i<=j)a[k++]=s[i++];
    41             }
    42             else a[k]='0';  //直接赋值为'0'
    43         }
    44         cout<<a<<endl;
    45     }
    46     return 0;
    47 }
    测试数据:输入:.1  00  -.2  10  -0.0  0.0
    对应的输出:-0.1 0 0.2  -10  0 0
  • 相关阅读:
    Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.12.4:test (default-test)
    maven打包报错:Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.5:test
    关于log4j:WARN No appenders could be found for logger (org.apache.hadoop.metrics2.lib.MutableMetricsFactory).的问题
    maven-source 1.3 中不支持注释请使用 -source 5 或更高版本以启用注释
    <Android基础>(二) Activity Part 1
    <Android基础>(一)
    数制
    第二次实验报告:使用Packet Tracer分析应用层协议
    在Windows Server 2003中搭建DNS服务器
    第一次作业:使用Packet Tracer分析HTTP包
  • 原文地址:https://www.cnblogs.com/acgoto/p/8830232.html
Copyright © 2011-2022 走看看