首页 > 其他分享 >pat 乙级1024 科学计数法关于stl中size()的一些思考即测试点六,无符号整数问题

pat 乙级1024 科学计数法关于stl中size()的一些思考即测试点六,无符号整数问题

时间:2023-03-02 20:58:40浏览次数:42  
标签:1024 数字 测试点 样例 整数 计数法 size

来,先看题目:1024 科学计数法
分数 20 作者 HOU, Qiming 单位 浙江大学
科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式 [+-][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

我有两种解决方法,一种是随着读的过程就打印出来,一种是存在字符串里。废话不多说,先看代码

#include<bits/stdc++.h>
using namespace std;
int main(){
    string a,b;cin>>a;
    if(a[0]=='-')cout<<"-";
    //int i;//i-2位数,小数i-3
    int num;
    int pos=a.find('E');
    if(a[pos+1]=='-')num=(-1)*stoi(a.substr(pos+2));
    else num=stoi(a.substr(pos+2));
    int youxiaowei=-pos+3+num;
    for(int i=0;i<pos;i++){
        if(isdigit(a[i]))b=b+a[i];
    }
    int k=youxiaowei;
    k=k+b.size();
    if(youxiaowei<0){
        if(k<=0){
            cout<<"0.";
            for(int i=0;i<-1*k;i++)cout<<"0";
            cout<<b<<endl;
        }
        else{//测试点3,4  测试样例:+1.234E+01;
            int cnt=0;
            while(k-cnt!=0){
                cout<<b[cnt++];
                
            }
            cout<<"."<<b.substr(cnt);
            
        }
    }
    else{
        cout<<b;
        for(int i=0;i<(youxiaowei);i++)cout<<"0";
        cout<<endl;
    }
    
    return 0;
}
// #include<bits/stdc++.h>
// using namespace std;
// int main(){
//     string a,b;cin>>a;
//     if(a[0]=='-')cout<<"-";
//     //int i;//i-2位数,小数i-3
//     int num;
//     int pos=a.find('E');
//     if(a[pos+1]=='-')num=(-1)*stoi(a.substr(pos+2));
//     else num=stoi(a.substr(pos+2));
//     int youxiaowei=-pos+3+num;
//     for(int i=0;i<=pos;i++){
//         if(isdigit(a[i]))b=b+a[i];
//     }
//     int k=youxiaowei;
//     k=k+b.size();
//     if(youxiaowei<0){
//         if(k<=0){
//             for(int i=0;i<-1*k;i++)b="0"+b;
//             b="0."+b;
//         }
//         else{
//             b=b.substr(0,b.size()+youxiaowei)+"."+b.substr(b.size()+youxiaowei);
//         }//注意b.size()是一个无符号整数,如果它直接和另一个数相运算且结果小于0;则会出错测试点6
//     }
//     else{
//         for(int i=0;i<(youxiaowei);i++)b+="0";
//     }
//     for(int i=0;b[i]=='0';){
//         if(b.find('.')==1)break;
//         else b.erase(0,1);
//     }
//     if(b!="")
//         cout<<b;
//     else cout<<0<<endl;
//     return 0;
// }

总结:一个无符号整数,如果它直接和另一个数相运算且结果小于0。运算得到的结果就不是小于0,而是它的存储的补码所构成的无符号整数,是一个非常大的数。所以,使用size()的时候当万分注意

标签:1024,数字,测试点,样例,整数,计数法,size
From: https://www.cnblogs.com/ahappyfool/p/17173405.html

相关文章

  • leetcode-1024-easy
    DivisorGameAliceandBobtaketurnsplayingagame,withAlicestartingfirst.Initially,thereisanumbernonthechalkboard.Oneachplayer'sturn,that......
  • 基本计数法
    小球装箱问题小球装箱问题:有\(k\)个球,装进\(n\)个箱子里,问有几种方案?分别讨论球是否相同,箱子是否相同,每个箱子至少一个、至多一个、没有限制,共12种不同情况。第一种:球不......
  • [LeetCode] 1024. Video Stitching
    Youaregivenaseriesofvideoclipsfromasportingeventthatlasted time seconds.Thesevideoclipscanbeoverlappingwitheachotherandhavevaryingl......
  • 十二重计数法
    问题背景:(组合版本)\(n\)个小球放入\(m\)个盒子中。(集合版本)\(n\)元集合映射到\(m\)元集合。有\(12\)种对方案的计数方式。球和盒子是否相同(意思是,对于两个相同......
  • PAT-basic-1024 科学计数法 java
    一、题目科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式[+-][1-9].[0-9]+E[+-][0-9]+,即数字的整数部分只有1位,小数部分至少有1位,该......
  • 转:pycrypto安装出错的问题 intmax_t C:\Program Files (x86)\Windows Kits\10\inc
    前言:需要安装 MicrosoftVisualStudio2017Community 或者buildtools 解决方案一(解决了python3.7上安装pycrypto-2.6.1的错误问题):1.设置MicrosoftVisualStudio......
  • 1G=1024Mb 1Mb=1024kb 1kb=1000bp
     一直纠结这种单位换算,是1024还是1000,原来是这样计算的。  来源:https://www.jianshu.com/p/6da01c23d1c0 ......
  • HDU 1024 Max Sum Plus Plus
    题目大意:给定一个长度为\(n\)数组,求划分成\(m\)段不相交区间的子段和最大值得问题那么需要考虑得就是对于第i个数字,是否选中它在m个区间中,以及如果选中它那么它在第几个......
  • 解决com.mysql.cj.jdbc.exceptions.PacketTooBigException: Packet for query is too
    1.今天遇到一个蛮奇怪的问题,项目一天都没啥问题,然后等我下班测试就跟我说报错报错如下:    2.然后我立马去控制台打印实时日志查看报如下错;    3.经......
  • 硬件/软件测试点
    硬件测试点:1.电梯  2.黑板  软件测试点1.游戏签到界面 ......