PAT1024
科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式[+-][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
技巧:分段输出 比如1.23400 * 10^-3 等于0.00123400
把0.看出一段 这是无论如何都存在的 所以可以先输出0.
中间的00看成一段 这一段的0个数与指数有关 指数为-1 输出0个0 指数为-2 输出1个0 以此类推 循环输出
最后的主体部分123400 就是原式中的1.23400去掉小数点 处理一下输出
三次输出,构成答案,如果全部挤在一起输出 会显复杂
# include<iostream>
# include<algorithm>
# include<stdio.h>
# include<string>
using namespace std;
int main()
{
char s[],fuhao1,fuhao2,zs[];
int i,zhi=,j,h=,k=,flag=,tn = ;
int zhishu;
string a;
cin>>a;
fuhao1 = a[];
if(fuhao1=='+') //分段输出----------符号
{ }
else
{
cout<<"-";
}
for(i=;i<a.length();i++) //利用flag 将字符串a分成 主体数字字符串 、指数符号、 指数字符串 三个部分
{
if(a[i]=='E')
{
flag = ; continue;
} if(flag==)
{
s[+h] = a[i]; h++;
}
else if(flag == )
{
fuhao2 = a[i]; flag = ; continue;
}
else
{
zs[k]=a[i]; k++;
}
} for(i=k-;i>=;i--) //将指数字符串 转化为 整数形式
{
zhi = zhi + (zs[i]-'')*tn;
tn = tn * ;
} if(fuhao2=='+') //如果指数前的符号为正 分为3种可能 小数点仍存在 小数点刚好消失 小数点消失且要加0
{
if(h>zhi+)
{
char t;
t = s[]; //保存小数点
for(i=;i<zhi;i++) //数组循环前移,覆盖住了小数点的位置
{
s[+i] = s[+i];
}
s[+zhi] = t; //将小数点 放在数组前移后留下的最后一个位置
for(i=;i<h;i++)
{
cout<<s[+i];
}
}
else if(h==zhi+)
{
for(i=;i<h;i++)
{
if(i==)
{
continue;
}
cout<<s[+i];
}
}
else
{
for(i=;i<h-;i++) //数组循环前移覆盖小数点
{
s[+i] = s[+i];
}
zhishu = zhi -h + ;
for(j=;j<zhishu;j++)
{
s[+i-+j] = ''; //加0
}
for(i=;i<=zhi;i++)
{
cout<<s[+i];
}
}
}
else
{ char t;
t = s[];s[]=s[];s[]=t;
cout<<"0.";
for(i=;i<zhi;i++)
{
cout<<"";
}
for(i=;i<h;i++)
{
cout<<s[+i];
} }
return ;
}
PAT1024的更多相关文章
- PAT1024. Palindromic Number
//自己方法只能拿到15分后边老是又过不了的点,用了网上别人的方法,用库函数的翻转reverse(),参数分别是起始位置个结束位置,注意只能在原存储空间翻转,即比较对称时,再生请一个空间,将原来字符串 ...
- PAT1024 强行用链表写了一发。
主要的思想还是 上课的那个PPT上面的 链表反转的思想. 然后加一点七七八八的 递推. 一层一层往下翻转就好啦. 1A 真开心. 代码:http://paste.ubuntu.net/16506799 ...
- PAT1024. Palindromic Number (25)
输入即为回文的情况要考虑 #include <iostream> #include <algorithm> //reverse using namespace std; str ...
- PAT1136:A Delayed Palindrome
1136. A Delayed Palindrome (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue ...
随机推荐
- Java的几种加载驱动的方法
1.Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); 2.DriverManager.registerD ...
- sql常识
1.UNION与UNION ALL的区别UNION去重且排序UNION ALL不去重不排序2.sql语句or与union all的执行效率比较:union all>union> in &g ...
- IOS tableView 去除分割线 和 不允许选中表格cell
//去除分割线 self.tableView.backgroundColor=[UIColor colorWithRed:///255.0 alpha:1.0]; self.tableView.sep ...
- Android(java)学习笔记74:ListViewProject案例(ListView + ArrayAdapter)
1. 首先是MainActivity.java文件,如下: package com.himi.lv1; import java.util.ArrayList; import java.util.Lis ...
- Android(java)学习笔记83:各种边距设置
1. 各种边距设置: (1)android:layout_paddingLeft 内边距,对谁用,指的是谁的内部内容边距 (2)android:layout_marginLeft 外边距,对谁用,指的 ...
- 【BZOJ4033】[HAOI2015] 树上染色(树形DP)
点此看题面 大致题意: 给你一棵点数为N的带权树,要你在这棵树中选择K个点染成黑色,并将其他的N-K个点染成白色.要求你求出黑点两两之间的距离加上白点两两之间距离的和的最大值. 树形\(DP\) 这道 ...
- 【洛谷2577】[ZJOI2005] 午餐(较水DP)
点此看题面 大致题意: 有\(N\)个学生去食堂打饭,每个学生有两个属性:打饭时间\(a_i\)和吃饭时间\(b_i\).现要求将这些学生分成两队分别打饭,求最早何时所有人吃完饭. 贪心 首先,依据贪 ...
- IPv4与IPv6的校验函数
1. PHP校验IPv4掩码是否合法,在网上搜了下,排名最高的如下, <?php function is_mask($mask){ $bin_mask =(string)decbin(ip2lo ...
- shiro学习记录(一)
1 权限概述 认证:系统提供的用于识别用户身份的功能,通常登录功能就是认证功能-----让系统知道你是谁?? 授权:系统授予用户可以访问哪些功能的许可(证书)----让系统知道你能做什么?? 2 常见 ...
- 循环 -----JavaScript
本文摘要:http://www.liaoxuefeng.com/ JavaScript的循环有两种,一种是for循环,通过初始条件.结束条件和递增条件来循环执行语句块: var x = 0; var ...