uva 537
2016-07-23 23:00
381 查看
一道关于字符串的简单题,主要就是从字符串中找到两个等号的位置后,进行分析便可。
另外注意前缀所代表的数值大小(k, M, m)
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <string>
#include <sstream>
using namespace std;
int kasenum;
string str;
double power, volt, curr;
int pos[3];
char ch;
double scan(int index)
{
bool flag = false;
double res = 0.0, frac = 0.0, ratio = 0.1, multi = 1;
if ('-' == str[index])
flag = true;
else if (str[index] >= '0' && str[index] <= '9')
res = str[index] - '0';
index++;
while (str[index] >= '0' && str[index] <= '9')
{
res = res * 10 + str[index] - '0';
index++;
}
if ('.' == str[index])
{
index++;
while (str[index] >= '0' && str[index] <= '9')
{
frac = frac + ratio * (str[index] - '0');
index++;
ratio *= 0.1;
}
}
res += frac;
switch (str[index])
{
case 'm':
multi = 1e-3;
break;
case 'k':
multi = 1e+3;
break;
case 'M':
multi = 1e+6;
break;
default:
multi = 1.0;
break;
}
res *= multi;
return flag ? -res : res;
}
void readInfo()
{
getline(cin, str);
pos[0] = str.find('=');
pos[1] = str.find('=', pos[0] + 1);
for (int i = 0; i < 2; i++)
{
switch (str[pos[i] - 1])
{
case 'U':
volt = scan(pos[i] + 1);
break;
case 'I':
curr = scan(pos[i] + 1);
break;
case 'P':
power = scan(pos[i] + 1);
break;
}
}
}
int main()
{
freopen("in.txt", "r", stdin);
freopen("out.txt", "w", stdout);
scanf("%d", &kasenum);
getchar();
int kase = 0;
while (kasenum--)
{
power = -1;
volt = -1;
curr = -1;
readInfo();
printf("Problem #%d\n", ++kase);
if (-1 == power)
printf("P=%.2lfW\n", volt * curr);
else if (-1 == volt)
printf("U=%.2lfV\n", power / curr);
else
printf("I=%.2lfA\n", power / volt);
printf("\n");
}
return 0;
}
另外注意前缀所代表的数值大小(k, M, m)
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <string>
#include <sstream>
using namespace std;
int kasenum;
string str;
double power, volt, curr;
int pos[3];
char ch;
double scan(int index)
{
bool flag = false;
double res = 0.0, frac = 0.0, ratio = 0.1, multi = 1;
if ('-' == str[index])
flag = true;
else if (str[index] >= '0' && str[index] <= '9')
res = str[index] - '0';
index++;
while (str[index] >= '0' && str[index] <= '9')
{
res = res * 10 + str[index] - '0';
index++;
}
if ('.' == str[index])
{
index++;
while (str[index] >= '0' && str[index] <= '9')
{
frac = frac + ratio * (str[index] - '0');
index++;
ratio *= 0.1;
}
}
res += frac;
switch (str[index])
{
case 'm':
multi = 1e-3;
break;
case 'k':
multi = 1e+3;
break;
case 'M':
multi = 1e+6;
break;
default:
multi = 1.0;
break;
}
res *= multi;
return flag ? -res : res;
}
void readInfo()
{
getline(cin, str);
pos[0] = str.find('=');
pos[1] = str.find('=', pos[0] + 1);
for (int i = 0; i < 2; i++)
{
switch (str[pos[i] - 1])
{
case 'U':
volt = scan(pos[i] + 1);
break;
case 'I':
curr = scan(pos[i] + 1);
break;
case 'P':
power = scan(pos[i] + 1);
break;
}
}
}
int main()
{
freopen("in.txt", "r", stdin);
freopen("out.txt", "w", stdout);
scanf("%d", &kasenum);
getchar();
int kase = 0;
while (kasenum--)
{
power = -1;
volt = -1;
curr = -1;
readInfo();
printf("Problem #%d\n", ++kase);
if (-1 == power)
printf("P=%.2lfW\n", volt * curr);
else if (-1 == volt)
printf("U=%.2lfV\n", power / curr);
else
printf("I=%.2lfA\n", power / volt);
printf("\n");
}
return 0;
}
相关文章推荐
- 2016这些Android技术可能会很火
- http返回码
- java的包导入机制总结与剖析
- new和delete
- HDU-1251 统计难题(字典树)
- python核心编程第五章练习
- Hdu-5739 Fantasia (图论点双连通分量+DP)
- hd 1286 找新朋友 (欧拉函数)
- 条件概率
- 今天开博了,努力学习c++中
- uva 409
- 小游戏之扫雷
- mac快捷键整理以及node的基本使用
- Android TV中获取有线网卡的MAC地址
- 字符串处理,Poj(2121)
- EasyUI_Datagrid上下键编辑行,锁定编辑单元格所在的列(二)
- Mac 像Win一样双开Unity
- 观察者模式
- TCP协议通讯原理
- 学代码中的知识