题目https://pintia.cn/problem-sets/994805342720868352/problems/994805413520719872

题意

给定两个数,表示成0.xxxxx*10^k次这样的科学记数法之后,判断小数点后的n位是否相同

思路

分类大讨论。细节要考虑清楚。因为最多是100位所以要用字符串处理。

首先我们要知道这两个数的小数点在什么位置(digita,digtb),如果没有小数点就默认在最后一位。

然后我们还需要知道有没有前导零(firsta,firstb),比如0.001,这样的数小数点也是要挪的。

所以*10^k中的k应该是$digita - firsta$,如果结果是负数还应该加一。

然后是输出前面的东西。要特别判断一下他们是不是0.

把输出的小数点之后的数字重新存储一下,如果不到n位就在后面补0

 #include<cstdio>
#include<cstdlib>
#include<map>
#include<set>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<vector>
#include<cmath>
#include<stack>
#include<queue> #define inf 0x7fffffff
using namespace std;
typedef long long LL;
typedef pair<string, string> pr; int n;
char a[], b[]; int main()
{
scanf("%d", &n);
scanf("%s%s", a, b);
int tmpa[], tmpb[];
int diga = -, digb = -;
int lena = strlen(a), lenb = strlen(b);
int da = , db = ;
int firsta = -, firstb = -;
for(int i = ; i < lena; i++){
if(a[i] == '.'){
diga = i;
continue;
}
if(firsta == - && a[i] != ''){
firsta = i;
}
if(diga != - && firsta != -)break;
}
if(diga == -)diga = lena;
if(firsta != -){
diga -= firsta;
if(diga < )diga++;
}
// if(diga < 0){
// while(da < abs(diga)){
// tmpa[da++] = 0;
// }
// }
for(int i = max(firsta, ); i < lena; i++){
if(a[i] == '.'){
continue;
}
tmpa[da++] = a[i] - '';
}
while(da < n){
tmpa[da++] = ;
} for(int i = ; i < lenb; i++){
if(b[i] == '.'){
digb = i;
continue;
}
if(firstb == - && b[i] != ''){
firstb = i;
}
}
if(digb == -){
digb = lenb;
}
if(firstb != -){
digb -= firstb;
if(digb < )digb++;
}
// if(digb < 0){
// while(db < abs(digb)){
// tmpb[db++] = 0;
// }
// }
for(int i = max(, firstb); i < lenb; i++){
if(b[i] == '.')continue;
tmpb[db++] = b[i] - '';
}
while(db < n){
tmpb[db++] = ;
} //cout<<firsta<<endl<<firstb<<endl;
//cout<<diga<<endl<<digb<<endl; if(diga != digb && (firsta != - || firstb != -) && (firsta < n || firstb < n)){
printf("NO 0.");
if(firsta == - || firsta >= n){
for(int i = ; i < n; i++){
printf("");
}
printf("*10^0 0.");
}
else{
for(int i = ; i < n; i++){
printf("%d", tmpa[i]);
}
printf("*10^%d 0.", diga);
}
if(firstb == - || firstb >= n){
for(int i = ; i < n; i++){
printf("");
}
printf("*10^0\n");
}
else{
for(int i = ; i < n; i++){
printf("%d", tmpb[i]);
}
printf("*10^%d\n", digb);
}
}
else{
bool flag = true;
for(int i = ; i < n; i++){
if(tmpa[i] != tmpb[i]){
flag = false;
break;
}
}
if(firsta == - && firstb == -)flag = true;
if(flag){
printf("YES 0.");
if(firsta == -){
for(int i = ; i < n; i++){
printf("");
}
printf("*10^0\n");
}
else{
for(int i = ; i < n; i++){
printf("%d", tmpa[i]);
}
printf("*10^%d\n", diga);
}
}
else{
printf("NO 0.");
if(firsta == -){
for(int i = ; i < n; i++){
printf("");
}
printf("*10^0 0.");
}
else{
for(int i = ; i < n; i++){
printf("%d", tmpa[i]);
}
printf("*10^%d 0.", diga);
}
if(firstb == -){
for(int i = ; i < n; i++){
printf("");
}
printf("*10^0\n");
}
else{
for(int i = ; i < n; i++){
printf("%d", tmpb[i]);
}
printf("*10^%d\n", digb);
}
}
} return ;
}

PAT甲级1060 Are They Equal【模拟】的更多相关文章

  1. PAT 甲级 1060 Are They Equal

    1060. Are They Equal (25) 时间限制 50 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue If a ma ...

  2. PAT 甲级 1060 Are They Equal (25 分)(科学计数法,接连做了2天,考虑要全面,坑点多,真麻烦)

    1060 Are They Equal (25 分)   If a machine can save only 3 significant digits, the float numbers 1230 ...

  3. 【PAT】1060 Are They Equal (25)(25 分)

    1060 Are They Equal (25)(25 分) If a machine can save only 3 significant digits, the float numbers 12 ...

  4. PAT甲级1026 Table Tennis【模拟好题】

    题目:https://pintia.cn/problem-sets/994805342720868352/problems/994805472333250560 题意: 有k张乒乓球桌,有的是vip桌 ...

  5. PAT甲级1080 Graduate Admission【模拟】

    题目:https://pintia.cn/problem-sets/994805342720868352/problems/994805387268571136 题意: 模拟高考志愿录取. 考生根据总 ...

  6. PAT 甲级 1026 Table Tennis(模拟)

    1026. Table Tennis (30) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue A table ...

  7. pat 甲级 1053. Path of Equal Weight (30)

    1053. Path of Equal Weight (30) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue ...

  8. PAT 甲级 1053 Path of Equal Weight (30 分)(dfs,vector内元素排序,有一小坑点)

    1053 Path of Equal Weight (30 分)   Given a non-empty tree with root R, and with weight W​i​​ assigne ...

  9. PAT甲级——A1060 Are They Equal

    If a machine can save only 3 significant digits, the float numbers 12300 and 12358.9 are considered ...

随机推荐

  1. dup2替换

    今天看APUE上一道题,要求不能用fcnt1来替换dup1. 刚开始的思路是dup一个,测试发现与期望的不一致就马上关闭,发现遇到无限循环,刚才想了下,才发现一旦close掉,再次dup仍然是分配最小 ...

  2. maven打包含有多个main程序的jar包及运行方式

    pom.xml <build>        <plugins>            <plugin>                <groupId> ...

  3. Socket网络编程--简单Web服务器(4)

    上一小节已经实现了对图片的传输,接下来就是判断文件是否为js,css,png等格式.我们增加一个函数用于判断格式 int WebServer::get_filetype(char *type,char ...

  4. vue设置默认地址和配送方式

    1.截图 2.address.html <!DOCTYPE html> <html lang="en"> <head> <meta cha ...

  5. [转]在Windows上安装RabbitMQ

    原文链接    翻译:xiezc 下载服务器 描述 下载   Windows系统安装程序(来自Bintray) 的RabbitMQ的服务器-3.7.4.exe (签名) Windows系统安装程序(来 ...

  6. 卷积、矩阵乘积、高斯模糊滤波(降噪)、空域计算(2D卷积计算)、频域计算(FFT)的理解

    矩阵乘积:对应行列对应元素相乘的和组成新的矩阵 两个矩阵的乘法仅当第一个矩阵A的列数和另一个矩阵B的行数相等时才能定义.如A是m×n矩阵和B是n×p矩阵,它们的乘积C是一个m×p矩阵 并将此乘积记为: ...

  7. ffmpeg 移植到 android 并使用

    同步更新至个人blog:http://dxjia.cn/2015/07/ffmpeg-porting-to-android/ 空闲做了个小应用,从视频里截图,然后再将截图拼接为一个gif动画: 起初使 ...

  8. React Native 项目整合 CodePush 全然指南

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/y4x5M0nivSrJaY3X92c/article/details/81976844 作者 | 钱 ...

  9. src引入js时添加时间戳参数方法

    代码如下: <script>document.write('<script src="js/judgeLogin.js?t=' + new Date().getTime() ...

  10. 音视频处理ffmpeg使用

    参考资料: [url]http://blog.163.com/prosen@yeah/blog/static/12251328720099101378975/ http://ffmpeg.org/ff ...