zoukankan      html  css  js  c++  java
  • 科学计数法的值

    科学计数法是一种数学专用术语。将一个数表示成 a×10的n次幂的形式,其中1≤|a|<10,n为整数,这种记数方法叫科学计数法。例如920000可以表示为9.2*10^5

    现在需要对输入的字符串进行分离,自动识别该科学计数法中的a和幂次,计算其表征的具体数值并输出该值。

    例如,对于输入的复数字符串“9.210^5”,输出 The actual value for 9.210^5 is 920000

    注意:

    1、每组测试数据仅包括一个用于科学计数法的字符串。

    2、输入字符串保证合法。

    3、字符串长度不超过1000

    4、幂次不超过200

    输入示例:

    9.2*10^5

    输出示例:

    The actual value for 9.2*10^5 is 920000

    --------------------------------------------------------------

                 参考代码

    --------------------------------------------------------------

    欢迎指教!

    #include<stdio.h>
    #include<iostream>
    #include<string>
    #include<sstream>
    //<sstream>库定义了三种类:istringstream、ostringstream和stringstream,分别用来进行流的输入、输出和输入输出操作。
    using namespace std;
    int main()
    {
        string str;
        while(cin>>str)
        {
            string ans;//记录底数部分 
            bool flag,isSign,isMinus;
            int i;
            
            int len=str.size();//返回字符串长度 
            string::size_type loc=str.find("^");//查找^ 
            //找不到abc会返回-1,不为0为True。0为False 
            //任何存储string的size操作结果的变量必须为string::size_type类型。
            
            //检查指数部分是否为正 
            if(str[loc+1]!='-') 
                isSign=false;
            else 
                isSign=true;
                
            if(!isSign)//指数部分为正 
            {
                int intcnt=0;//记录底数整数部分长度 
                for(i=0;str[i]!='*' && str[i]!='.';i++)
                {
                    ans+=str[i];
                    intcnt++;
                }
                
                if(str[i]=='.')     i++;//跳过小数点 
                    
                int cnt=0;//记录底数小数部分长度 
                for(;str[i]!='*';i++)
                {
                    ans+=str[i];
                    cnt++;
                }
    
                int record;//记录指数数值 
                string tmp;//中间 
                stringstream ss;//
                
                if(loc==string::npos) 
                    record = 1;
                else
                {
                    for(i=loc+1;i<len;i++)//记录指数部分 
                        tmp+=str[i];
    
                    ss<<tmp;//String
                    ss>>record;//int
                }
                //判断是否不存在小数点 
                if(record<cnt)    
                    flag = false;
                else    
                    flag=true;
                
                int len1=ans.size();//底数部分长度 
                if(flag)//纯整数 
                {
                    cout<<"The actual value for "<<str<<" is "<<ans;
                    for (i=record-cnt;i>0;i--)    
                        cout<<"0";                    
                    cout<<endl;
                }
                else//有小数点 
                {
                    cout<<"The actual value for "<<str<< " is ";
                    for (i=0;i<intcnt+record;i++)    
                        cout<<ans[i];    
                    cout << ".";
                    for (i=intcnt+record;i<len1;i++)    
                        cout<<ans[i];
                    cout<<endl;
                }
            }
            else//指数部分为负
            {
                if(str[0]=='-')
                {
                    str.erase(0,1);
                    isMinus = true;
                }
                else
                {
                    isMinus = false;
                }
                
                len=str.size();
                int intcnt=0;
                for(i=0;str[i]!='*' && str[i]!='.'; i++)
                {
                    ans += str[i];
                    intcnt++;
                }
                if(str[i]=='.')
                    i++;
                for(;str[i]!='*';i++)
                    ans += str[i];
                
                int record;
                string tmp;
                stringstream ss;
                if(loc==string::npos)
                    record=1;
                else
                {
                    if(isMinus)
                        for(i=loc+1;i<len;i++)    
                            tmp+=str[i];
                    else
                        for(i=loc+2;i<len;i++)    tmp+=str[i];
                    ss<<tmp;
                    ss>>record;
                }
                cout<<"The actual value for "<<str<<" is ";
                if(isMinus)
                    cout<<"-";
                cout<<"0.";
                
                for(i=0;i<record-intcnt;i++)    
                    cout<<"0";
                cout<<ans<<endl;
            }
        }
        return 0;
    }

    欢迎指教,一起学习!

    未经本人允许,请勿转载!

    谢谢!

    个人分享,欢迎指导,未经允许,请勿转载。谢谢!
  • 相关阅读:
    js学习笔记
    Bootstrap学习笔记
    css学习任务二:切图写代码
    九宫格改进
    js学习笔记
    XHTML复习笔记
    html基础知识复习笔记
    css学习任务一:绘制九宫格
    如何不使用第三个变量来交换两个数的值
    算术右移与逻辑右移
  • 原文地址:https://www.cnblogs.com/hello-OK/p/6930823.html
Copyright © 2011-2022 走看看