您的位置:首页 > 编程语言 > Go语言

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  algorithm STL