zoukankan      html  css  js  c++  java
  • B1024/A1073科学计数法

    科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式 [+-][1-9].[0-9]+E[+-][0-9]+,即数字的整数部分只有 1 位,小数部分至少有 1 位,该数字及其指数部分的正负号即使对正数也必定明确给出。

    现以科学计数法的格式给出实数 A,请编写程序按普通数字表示法输出 A,并保证所有有效位都被保留。

    输入格式:

    每个输入包含 1 个测试用例,即一个以科学计数法表示的实数 A。该数字的存储长度不超过 9999 字节,且其指数的绝对值不超过 9999。

    输出格式:

    对每个测试用例,在一行中按普通数字表示法输出 A,并保证所有有效位都被保留,包括末尾的 0。

    输入样例 1:

    +1.23400E-03
    
     

    输出样例 1:

    0.00123400

    输入样例 2:

    -1.2E+10
    
     

    输出样例 2:

    -12000000000

    思路:

    • 首先遍历字符串找到E所在的位置,使用头文件<string>中的substr()函数存储E之前的字符串a和E之后的指数字符串b;

    【注】Substr(pos,len)返回从pos位开始,长度为len的子串;

    • 将b通过stoi()函数转换成整数型e判断正负。若为负,先输出0.,然后输出e-1个0,最后输出字符串a;若为正,比较a小数点之后的位数cnt和e的大小,若e大,输出a(除小数点)之后,再输出e-cnt个0,否则,输出小数点后的e位数然后输出小数点,最后输出a剩余部分。

    问题:

    测试2 3答案错误

    解决:

    加一个e!=cnt时才输出小数点的if语句。

     

     1 #include <iostream>
     2 #include <string>
     3 using namespace std;
     4 int main() {
     5     string str;
     6     cin >> str;
     7     if (str[0] == '-')cout << "-";
     8     int i = 0;
     9     while (str[i] != 'E')i++;
    10     string a = str.substr(1, i - 1);
    11     string b = str.substr(i + 1, str.length() - i);
    12     int e = stoi(b);
    13     if (e < 0) {
    14         cout << "0.";
    15         for (int j = 0; j < abs(e) - 1; j++)cout << "0";
    16         for (int k = 0; k < a.length(); k++) {
    17             if (a[k] == '.');
    18             //k++;
    19             else cout << a[k];
    20         }
    21     }
    22     else if (e > 0) {
    23         int cnt = a.length() - 2;
    24         if (cnt < e) {
    25             for (int k = 0; k < a.length(); k++) {
    26                 if (a[k] == '.');
    27                 else cout << a[k];
    28             }
    29             for (int j = 0; j < e - cnt; j++)cout << "0";
    30         }
    31         else {
    32             cout << a[0];
    33             for (int j = 2; j < e + 2; j++) {
    34                 cout << a[j];
    35             }
    36             if (e != cnt)cout << ".";//防止一个数最后一个小数点
    37             for (int k = e + 2; k < a.length(); k++)
    38                 cout << a[k];
    39         }
    40     }
    41     else cout << a;
    42     return 0;
    43 }

     

     

    作者:PennyXia
             
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    pandas分组聚合基本操作
    微信开发系列----01:成为开发者
    未能加载文件或程序集“System.Web.Http.WebHost, Version=4.0.0.0, ”或它的某一个依赖项。系统找不到指定的文件。
    ADO.NET基础巩固-----连接类和非连接类
    ADO.NET封装的SqlHelper
    Jmeter + Grafana + InfluxDB 性能测试监控
    性能测试监控:Jmeter+Collectd+Influxdb+Grafana
    性能测试总结(一)---基础理论篇
    地铁模型分析性能测试
    JIRA问题状态已关闭,但是解决结果还是未解决
  • 原文地址:https://www.cnblogs.com/PennyXia/p/12296120.html
Copyright © 2011-2022 走看看