1605: 大一下之小试身手
Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 256 Solved: 49
[Submit][Status][Web Board]
Description
在浙江中医药大学的半年学习,你看起来帅了很多,这个时候你已经看不上A+B了,现在你喜欢用你的代码去模拟你看到一切的事物。有一天你发现了一门神奇的语言那就是python,比如print “xxxx”*100,就可以把”xxxx”连续输出一百遍… 这个时候你表示不服,我的C语言也可以,不就是多写一个循环而已么。不开心的你于是决定用C模拟Python解释器,考虑到… 其实也没啥,现在我告诉你Python的一些常用的运算符号和规则,你来做个解释器,恩,就这样。
在Python里 “*”,”+”,”/”, ”-”,”%” 和C语言一样
“**”表示幂运算,比如2**3==8
给你的语句如下:
Print string * num(string表示一个字符串,num表示一个数)
Print a operator b ( 输出a ,b经过operator运算的结果)
Input
只有上述两种输入(数据在Long long 内)
Output
输出正确的答案
Sample Input
print 54*1
print "Tomcat"*2
Sample Output
54
TomcatTomcat
模拟,细节处理好(比如有可以出现负数的情况)
#include<bits/stdc++.h>
using namespace std;
#define e exp(1)
#define pi acos(-1)
#define mod 998244353
#define inf 0x3f3f3f3f
#define ll long long
#define ull unsigned long long
#define mem(a,b) memset(a,b,sizeof(a))
int gcd(int a,int b){return b?gcd(b,a%b):a;}
ll qpow(ll a,ll b)
{
ll ans=1;
while(b)
{
if(b&1)ans*=a;
a*=a;
b>>=1;
}
return ans;
}
int main()
{
char s[10005];
char q[15];
while(~scanf("%s",s))
{
scanf("%s",s);
int len=strlen(s);
char t[10005];
int i=0,cnt=0,num=0;
if(s[i]=='"')
{
i++;
while(s[i]!='"')
{
t[cnt++]=s[i];
i++;
}
i+=2;
for(; i<len; i++)
{
num=num*10+s[i]-'0';
}
t[cnt]='\0';
for(int k=0; k<num; k++)
{
printf("%s",t);
}
puts("");
}
else
{
ll a=0,b=0,f=1;
int flag=0;
if(s[i]=='-')f=-1,i++;
while(s[i]>='0'&&s[i]<='9')
{
a=10*a+s[i]-'0';
i++;
}
a*=f;
char q=s[i];
if(s[i+1]=='*')i++,flag=1;
i++;
f=1;
if(s[i]=='-')f=-1,i++;
while(s[i]>='0'&&s[i]<='9')
{
b=10*b+s[i]-'0';
i++;
if(i>=len)break;
}
b*=f;
if(flag)
{
printf("%lld\n",qpow(a,b));
}
else
{
if(q=='*')printf("%lld\n",a*=b);
else if(q=='/')printf("%lld\n",a/=b);
else if(q=='%')printf("%lld\n",a%=b);
else if(q=='-')printf("%lld\n",a-=b);
else if(q=='+')printf("%lld\n",a+=b);
}
}
}
return 0;
}