美文网首页
1605: 大一下之小试身手

1605: 大一下之小试身手

作者: Celia_QAQ | 来源:发表于2019-07-06 12:34 被阅读0次

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

思路:模拟,注意细节。。。
参考博客:
https://blog.csdn.net/yu121380/article/details/81979268
https://blog.csdn.net/dream_weave/article/details/80035281

#include<vector>
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<map>
#include<algorithm>
#include<stdlib.h>

using namespace std;
typedef long long ll;
const int maxn=300050;
ll f(ll a,ll b){//快速幂 
    ll sum=1;
    while(b){
        if(b&1)sum*=a;
        a*=a;
        b>>=1;
    }
    return sum;
}
int main(){
    int n;
    char s[10005];
    char q[15];
    while(~scanf("%s",s)){
    scanf("%s",s);
    int len=strlen(s);
    char a[10005];
    
    int i=0,ans=0,num=0;   
    if(s[i]=='"'){
        i++;
        while(s[i]!='"')//右括号
        {
            a[ans++]=s[i];
            i++;
        }
        i+=2;
        for(;i<len;i++)
            num=num*10+s[i]-'0';
        a[ans]='\0';
        for(int i=0;i<num;i++)
            printf("%s",a);
        puts("");
    }
    else {
        ll a=0,b=0,c=1;
        int flag=0;
        if(s[i]=='-') c=-1,i++ ;
        while(s[i]>='0'&&s[i]<='9'){
            a=10*a+s[i]-'0';
            i++;
        }
        a*=c;
        char q=s[i];
        if(s[i+1]=='*')i++,flag=1;
        i++;
        
        c=1;
        if(s[i]=='-')c=-1,i++;
        while(s[i]>='0'&&s[i]<='9')
        {
            b=10*b+s[i]-'0';//
            i++;
            if(i>=len)break;    
        }
        b*=c;
        
        if(flag)
            printf("%lld\n",f(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;
}

方法2:来自https://blog.csdn.net/dream_weave/article/details/80035281(使用sscanf())

#include<bits/stdc++.h>
 
using namespace std;
 
typedef long long ll;
 
ll power(ll a,ll b)
{
    ll ans=1;
    while(b)
    {
        if(b&1) ans*=a;
        b>>=1;
        a*=a;
    }
    return ans;
}
 
int main()
{
    ll a,b;
    char s[1000];
    while(gets(s))
    {
//        if(s[6]=='"') // (low 方法)
//        {
//            string ss=string(s);
//            int l=ss.find_first_of('"');
//            int r=ss.find_last_of('"');
//            ss=ss.replace(ss.begin()+r,ss.begin()+r+1," ");
//            ss=ss.replace(ss.begin()+l,ss.begin()+l+1,"");
//            sscanf(ss.c_str(),"print %s *%lld",ss.begin(),&b);
//            for(int i=0;i<b;i++)
//                printf("%s",ss.c_str());
//            puts("");
//            continue;
//        }
 
        ll rs; char ss[1000];
    
        if(sscanf(s,"print %lld*%lld",&a,&b)==2) rs=a*b;
        else if(sscanf(s,"print %lld+%lld",&a,&b)==2) rs=a+b;
        else if(sscanf(s,"print %lld/%lld",&a,&b)==2) rs=a/b;
        else if(sscanf(s,"print %lld-%lld",&a,&b)==2) rs=a-b;
        else if(sscanf(s,"print %lld%%%lld",&a,&b)==2) rs=a%b;
        else if(sscanf(s,"print %lld**%lld",&a,&b)==2) rs=power(a,b);
        else if(sscanf(s,"%*s \"%[^\"]\"*%lld",ss,&b)==2) 
//            print "Tomcat"*2 (推荐)
        {
//            printf("ss == %s\n",ss);
//            printf("b == %lld\n",b);
            while(b--)
                printf("%s",ss);
            puts("");
            continue;
        }
 
        printf("%lld\n",rs);
    }
    return 0;
}

相关文章

  • 1605: 大一下之小试身手

    Description在浙江中医药大学的半年学习,你看起来帅了很多,这个时候你已经看不上A+B了,现在你喜欢用你的...

  • 小试身手😉

  • 小试身手

    手工课上,最受我们欢迎的周老师站在讲台前,让我们用自己带来的布和豆子缝一个小包。听完老师的要求,我便拿出准备...

  • 小试身手

    如果不是忙里偷闲的和大江去了一趟千岛画廊,也许聂凡永远也体会不到还有这样一种有趣的休闲运动。 在水都上游被称为千岛...

  • 梦想花园之小试身手

    家里有个”大”阳台,说大也不大吧,大约十个方,之前放了几棵大的绿植和一些杂物把阳台塞满,因此今年开始决定断舍离,陆...

  • Goland 2020.3小试身手

    download some console output

  • 小试身手—— Redis之发布/订阅机制

    相关命令: PUBLISH 发布SUBSCRIBE 订阅PSUBSCRIBE 一种订...

  • 游戏小传二小试身手

    进了这家公司,就开始了入行来的第一款游戏的开发,是一款SLG,那时《热血三国》是第一款网页游戏成名作,月流水达到了...

  • 小试身手| 黄酒炖大虾

    秋天适合喝点黄酒,今天我们就用黄酒来做油爆大虾吧! 【用料表】 【大显身手】 ✿✿第一步✿✿ 将新鲜大虾剪去虾头尖...

  • 《岁月轻狂》12、小试身手

    三哥这个短信!天雷滚滚啊。 这句话什么意思呢?想破了头我也是不明白啊。我回道: “shen me yi si?”(...

网友评论

      本文标题:1605: 大一下之小试身手

      本文链接:https://www.haomeiwen.com/subject/wllshctx.html