UVA 4566 - Resistors
2015-12-22 14:35
429 查看
题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2567
题 意:告诉你电阻的计算方法,让你计算出题目所给的的电阻的阻值。
思 路:直接用栈模拟电阻的求解过程,只是在求并联电阻是要注意。
代码如下:
题 意:告诉你电阻的计算方法,让你计算出题目所给的的电阻的阻值。
思 路:直接用栈模拟电阻的求解过程,只是在求并联电阻是要注意。
代码如下:
#include <iostream> #include <stdio.h> #include <algorithm> #include <cmath> #include <stack> using namespace std; typedef long long LL; char v[100000]; LL a[10000], b[10000]; LL gcd( LL x, LL y ) { return y?gcd(y,x%y):x; } stack<LL> sa,sb; stack<char> ss; int main() { while( gets(v) != NULL ) { while( !sa.empty() ) sa.pop(); while( !sb.empty() ) sb.pop(); while( !ss.empty() ) ss.pop(); for( int i = 0; v[i] != '\0'; i ++ ) if( v[i] != ' ' ) { if( v[i] >= '0' && v[i] <= '9' ) { LL sd = 0; while( v[i] >= '0' && v[i] <= '9' && v[i] != '\0' ) { sd = sd*10 + v[i]-'0'; i++; } sa.push(sd); LL sf = 0; i++; while( v[i] >= '0' && v[i] <= '9' && v[i] != '\0' ) { sf = sf*10 + v[i]-'0'; i++; } sb.push(sf); i--; } if( v[i] == '|' || v[i] == '&' || v[i] == '(' ) ss.push( v[i] ); if( v[i] == ')' ) { while( !ss.empty() ) { char o = ss.top(); ss.pop(); if( o == '(' ) break; LL a = sa.top(); sa.pop(); LL b = sb.top(); sb.pop(); LL x = sa.top(); sa.pop(); LL y = sb.top(); sb.pop(); if( o == '&' ) { LL f1 = a*y + x*b; LL f2 = b*y; LL g = gcd( f1, f2 ); sa.push( f1/g ); sb.push( f2/g ); } else { LL f1 = a*y + x*b; LL f2 = a*x;//倒立求解在倒立存储 LL g = gcd( f1, f2 ); sa.push( f2/g ); sb.push( f1/g ); } } } } LL an1 = sa.top(); LL an2 = sb.top(); LL g = gcd( an1, an2 ); printf( "%lld/%lld\n", an1/g, an2/g ); } return 0; }
相关文章推荐
- 浅析STL中的常用算法
- STL区间成员函数及区间算法总结
- Javascript SHA-1:Secure Hash Algorithm
- c++ STL容器总结之:vertor与list的应用
- C++在成员函数中使用STL的find_if函数实例
- 关于STL中list容器的一些总结
- 关于STL中的map容器的一些总结
- 浅析stl序列容器(map和set)的仿函数排序
- STL list链表的用法详细解析
- stl容器set,map,vector之erase用法与返回值详细解析
- STl中的排序算法详细解析
- 关于STL中vector容器的一些总结
- 关于STL中set容器的一些总结
- 简单说说STL的内存管理
- STL与泛型编程(1)---模板
- CppUtest发现的STL容器内存泄漏问题
- STL中算法
- STL简单应用
- vector-list-deque
- 三十分钟掌握STL