字符串处理的题。原题链接

AC代码:

#include<cstring>
#include<cstdio>
#include<string>
#include<iostream>
#include<cmath>
using namespace std;
double res[3]; //res[0]~U res[1]~I res[2]~P
char unit[]={'V','A','W'};
char name[]={'U','I','P'};
double solve(int *t,int len)
{
    int pos;
    for(int i=0;i<len;++i)
    {
        pos=i;
        if(t[i]==-1) break;
    }
    if(pos==len-1) pos++;
    int len1=pos,len2=len-pos-1;

    double ans=0.00;
    pos=0;
    for(int i=len1-1;i>=0;--i)
        ans+=pow(10.0,i)*t[pos++];
    pos++;
    for(int i=1;i<=len2;++i)
        ans+=pow(0.1,i)*t[pos++];

    return ans;
}
int main()
{
    int T;
    scanf("%d",&T);
    int cnt=0;
    string str;
    while(T--)
    {
        for(int i=0;i<3;++i) res[i]=-1.0;
        getchar();
        getline(cin,str);
        printf("Problem #%d\n",++cnt);
        for(int i=0;i<str.size();++i)
        {
            if(str[i]!='=') continue;
            int j=i+1,len=0;
            int t[20];
            while(str[j]>='0'&&str[j]<='9'||str[j]=='.')
            {
                if(str[j]=='.') t[len++]=-1;
                else t[len++]=str[j]-'0';
                ++j;
            }
            double x=solve(t,len);
            if(str[j]=='m') x*=0.001;
            else if(str[j]=='k') x*=1000;
            else if(str[j]=='M') x*=1000000;

            if(str[i-1]=='U') res[0]=x;
            else if(str[i-1]=='I') res[1]=x;
            else if(str[i-1]=='P') res[2]=x;
        }
        int pos;
        for(int i=0;i<3;++i)
        {
            if(res[i]==-1) pos=i;
        }
        double ans=0.0;
        if(pos==0) ans=res[2]/res[1];
        else if(pos==1) ans=res[2]/res[0];
        else if(pos==2) ans=res[0]*res[1];
        printf("%c=%.2f%c\n\n",name[pos],ans,unit[pos]);
    }
    return 0;
}

如有不当之处欢迎指出!!

最新文章

  1. 使用Emit把Datatable转换为对象集合(List&lt;T&gt;)
  2. iptables 基础知识
  3. javascript 数组操作 转
  4. java记录在线人数小案例
  5. phpwind wap功能添加百度wap统计
  6. c#图像处理入门
  7. 【Android】Android在AlertDialog使用大全
  8. 《分布式Java应用之基础与实践》读书笔记二
  9. 阿里聚安全移动安全专家分享:APP渠道推广作弊攻防那些事儿
  10. 海量信息库,查找是否存在(bloom filter布隆过滤器)
  11. HTML5 头部【快速编写】
  12. 在myeclipse中使用./和../遇到的问题
  13. android recovery 升级UI显示之资源文件
  14. tornado 初识
  15. 1126 Eulerian Path (25 分)
  16. 一家VC支持企业的发展轨迹&mdash;&mdash;了解每次融资后股权和期权的变化,以及股份是如何被稀释的【转载】
  17. jquery事件 on(),live(),delegate(),blind()
  18. 三层架构搭建(asp.net mvc + ef)
  19. Solidworks如何添加齿轮
  20. python16_day15【Django入门】

热门文章

  1. python_18_反射
  2. java常用类--系统相关
  3. 在nagios中监控windows主机系统地址的状态
  4. Gitlab权限管理-issue管理[六]
  5. Spring AOP小记
  6. 一步一步从原理跟我学邮件收取及发送 9.多行结果与socket的阻塞
  7. 关于word图片显示不全
  8. c# 可变字符串 StringBuilder
  9. WebService学习------小实例开发(号码归属地查询)
  10. 浅谈python的对象的三大特性之封装