首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C#版 - PAT乙级(Basic Level)真题 之 1024.科学计数法转化为普通数字 - 题解

C#版 - PAT乙级(Basic Level)真题 之 1024.科学计数法转化为普通数字 - 题解

作者头像
Enjoy233
发布2019-03-05 15:48:16
7460
发布2019-03-05 15:48:16
举报

PAT Basic level 1024 科学计数法转化为普通数字

在线提交 - 牛客网: https://www.nowcoder.com/pat/6/problem/4050 或 PTA (拼题A) | 程序设计类实验辅助教学平台(原PAT) https://pintia.cn/problem-sets/994805260223102976/problems/994805297229447168

科学计数法 (20)

时间限制 1000 ms 内存限制 32768 KB 代码长度限制 100 KB 判断程序 Standard (来自 小小)

题目描述

科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式[+-][1-9]”.”[0-9]+E[+-][0-9]+,即数字的整数部分。

只有1位,小数部分至少有1位,该数字及其指数部分的正负号即使对正数也必定明确给出。

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

输入描述:

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

输出描述:

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

输入例子:

+1.23400E-03

输出例子:

0.00123400

输入样例:

+1.43500E+10
-1.2E+10
+5.6300E+539

输出样例:

14350000000
-12000000000
563000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

思路: 按照题意,满足要求的数形如: ±4.36E±05。

可更具体地表示为:±unsignDoubleE±0…0unsignInt (当然此处的int是long long的, 或int64的,而0…0是若干个连续的0)。事实上 ±unsignDouble可以直接看作double(记作part1),±0…0unsignInt可直接看作int(记作part2)。 已AC代码:

using System;
using System.Linq;

namespace LeetCode65_Valid_Number
{
    class Program
    {
        public class Solution
        {
            public string ToNum(string s)
            {
                string num = String.Empty;

                // s = s.Trim();
                string[] arr = s.Split('E');
                int LastZeroCountInPart1 = 0;
                foreach (char ch in arr[0].Reverse())
                {
                    if (ch == '0')
                        LastZeroCountInPart1++;
                    else
                    {
                        break;
                    }
                }

                bool isPart1Double = double.TryParse(arr[0], out var part1);
                int decimalDigitCountInPart1 = arr[0].IndexOf('.') == -1 ? 0 : arr[0].Length - 1 - arr[0].IndexOf('.');

                string newPart2 = arr.ElementAtOrDefault(1);
                bool isPart2Int = int.TryParse(newPart2, out var part2);
                if (arr.Length == 1)
                {
                    if (isPart1Double)
                        num = part1.ToString();
                }
                if (arr.Length == 2)
                {
                    if (part2 < 0 || part2 - decimalDigitCountInPart1 < 0)
                    {
                        if (isPart1Double && isPart2Int)
                            num = Decimal.Parse((part1 * Math.Pow(10, part2)).ToString(), System.Globalization.NumberStyles.Float).ToString(); // 此时Math.Pow(10, part2)并不会越界,故可使用Decimal.Parse从scientific num转换为real num
                    }
                    else if (part2 - decimalDigitCountInPart1 >= 0)
                    {
                        num = part1.ToString().Replace(".", "") + new String('0', part2 - decimalDigitCountInPart1);  // 避免越界,此处使用字符串拼接代替Math.Pow(10, part2),拼接还可用StringBuilder的append方法
                    }

                }

                return num + new String('0', LastZeroCountInPart1); // 此处拼接还可使用StringBuilder的append方法
            }
        }

        static void Main(string[] args)
        {
            Solution sol = new Solution();
            string str;
            while ((str = Console.ReadLine()) != null)
            {
                Console.WriteLine(sol.ToNum(str));
            }
        }
    }
}

Rank:

Pat1014
Pat1014

ps: 奇怪的是,该代码在牛客网上AC了,但在PTA上显示”部分正确”(得分17/20),而且PTA使用的是C#6.0编译器,牛客网支持C#7.0。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年07月09日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • PAT Basic level 1024 科学计数法转化为普通数字
  • 科学计数法 (20)
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档