Timemachine98 2024-08-27 21:47 采纳率: 33.3%
浏览 1

pta乙级11181118 如需挪车请致电

#问题如下
车主用一系列简单计算给出了自己的电话号码,即:

2/2=1、3+2=5、
9

=3、
9

=3、0%=0、叁=3、5−2=3、9/3=3、1×3=3、2
3
=8、8/2=4,最后得到的电话号码就是 153 3033 3384。

本题就请你写个程序自动完成电话号码的转换,以帮助那些不会计算的人。

输入格式:
输入用 11 行依次给出 11 位数字的计算公式,每个公式占一行。这里仅考虑以下几种运算:加(+)、减(-)、乘(*)、除(/)、取余(%,注意这不是上图中的百分比)、开平方根号(sqrt)、指数(^)和文字(即 0 到 9 的全小写汉语拼音,如 ling 表示 0)。运算符与运算数之间无空格,运算数保证是不超过 1000 的非负整数。题目保证每个计算至多只有 1 个运算符,结果都是 1 位整数。

输出格式:
在一行中给出电话号码,数字间不要空格。

输入样例:
2/2
3+2
sqrt9
sqrt9
6%2
san
5-2
9/3
1*3
2^3
8/2
输出样例:
15330333384

#我的代码:

#include<string.h> 
#include<map>
#include<string>
#include<iostream>
#include<math.h>
using namespace std;
const int maxn=2020;
int main(){
    map<string, int> mp;
    string str, ope;
    string::iterator it;
    mp["ling"]=0;
    mp["yi"]=1;
    mp["er"]=2;
    mp["san"]=3;
    mp["si"]=4;
    mp["wu"]=5;
    mp["liu"]=6;
    mp["qi"]=7;
    mp["ba"]=8;
    mp["jiu"]=9;
    mp["+"]=10;
    mp["-"]=11;
    mp["*"]=12;
    mp["/"]=13;
    mp["%"]=14;
    mp["sqrt"]=15;
    mp["^"]=16;
    for(int i=0;i<11;i++){
        str.clear();
        cin>>str;
        it=str.begin();
        int sum1=0, sum2=0;
        int len1=0, len2, len3;
        for(;it!=str.end();it++){
            if(*it>='0' && *it<='9'){
                sum1=sum1*10+(*it-'0');
                len1++;
            }else{
                break;
            }
        }
        for(;it!=str.end();it++){
            if(*it>='0' && *it<='9'){
                break;
            }else{
                len2++;
            }
        }
        for(;it!=str.end();it++){
            if(*it>='0' && *it<='9'){
                sum2=sum2*10+(*it-'0');
                len3++;
            }else{
                break;
            }
        }
        int openum=mp[str.substr(len1, len2)];
        printf("%d %d %d\n",sum1, sum2, openum);
        if(openum==0){
            printf("0");
        }else if(openum==1){
            printf("1");
        }else if(openum==2){
            printf("2");
        }else if(openum==3){
            printf("3");
        }else if(openum==4){
            printf("4");
        }else if(openum==5){
            printf("5");
        }else if(openum==6){
            printf("6");
        }else if(openum==7){
            printf("7");
        }else if(openum==8){
            printf("8");
        }else if(openum==9){
            printf("9");
        }else if(openum==10){
            printf("%d",sum1+sum2);
        }else if(openum==11){
            printf("%d",sum1-sum2);
        }else if(openum==12){
            printf("%d",sum1*sum2);
        }else if(openum==13){
            printf("%d",sum1/sum2);
        }else if(openum==14){
            printf("%d",sum1%sum2);
        }else if(openum==15){
            printf("%d",sqrt(sum2));
        }else if(openum==16){
            int sum=1;
            for(int i=0;i<sum2;i++){
                sum*=sum1;
            }
            printf("%d",sum);
        }
    }
    return 0;
}


我的问题是,为什么我的openum只在第一组循环里有效,其余情况都是0?

  • 写回答

1条回答 默认 最新

  • 吃不了席 2024-08-27 21:53
    关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    你的代码中,openum 变量在每次循环开始时都会被重新初始化为 0。因此,在第一次循环之后,openum 的值将始终为 0。为了解决这个问题,你需要将 openum 的初始化移动到循环外部,并在每次循环结束时更新它的值。以下是修改后的代码:

    #include<string.h> 
    #include<map>
    #include<string>
    #include<iostream>
    #include<math.h>
    using namespace std;
    const int maxn=2020;
    int main(){
        map<string, int> mp;
        string str, ope;
        string::iterator it;
        mp["ling"]=0;
        mp["yi"]=1;
        mp["er"]=2;
        mp["san"]=3;
        mp["si"]=4;
        mp["wu"]=5;
        mp["liu"]=6;
        mp["qi"]=7;
        mp["ba"]=8;
        mp["jiu"]=9;
        mp["+"]=10;
        mp["-"]=11;
        mp["*"]=12;
        mp["/"]=13;
        mp["%"]=14;
        mp["sqrt"]=15;
        mp["^"]=16;
        int openum = 0; // 将 openum 的初始化移动到这里
        for(int i=0;i<11;i++){
            str.clear();
            cin>>str;
            it=str.begin();
            int sum1=0, sum2=0;
            int len1=0, len2, len3;
            for(;it!=str.end();it++){
                if(*it>='0' && *it<='9'){
                    sum1=sum1*10+(*it-'0');
                    len1++;
                }else{
                    break;
                }
            }
            for(;it!=str.end();it++){
                if(*it>='0' && *it<='9'){
                    break;
                }else{
                    len2++;
                }
            }
            for(;it!=str.end();it++){
                if(*it>='0' && *it<='9'){
                    sum2=sum2*10+(*it-'0');
                    len3++;
                }else{
                    break;
                }
            }
            openum=mp[str.substr(len1, len2)]; // 更新 openum 的值
            printf("%d %d %d\n",sum1, sum2, openum);
            if(openum==0){
                printf("0");
            }else if(openum==1){
                printf("1");
            }else if(openum==2){
                printf("2");
            }else if(openum==3){
                printf("3");
            }else if(openum==4){
                printf("4");
            }else if(openum==5){
                printf("5");
            }else if(openum==6){
                printf("6");
            }else if(openum==7){
                printf("7");
            }else if(openum==8){
                printf("8");
            }else if(openum==9){
                printf("9");
            }else if(openum==10){
                printf("%d",sum1+sum2);
            }else if(openum==11){
                printf("%d",sum1-sum2);
            }else if(openum==12){
                printf("%d",sum1*sum2);
            }else if(openum==13){
                printf("%d",sum1/sum2);
            }else if(openum==14){
                printf("%d",sum1%sum2);
            }else if(openum==15){
                printf("%d",sqrt(sum2));
            }else if(openum==16){
                int sum=1;
                for(int i=0;i<sum2;i++){
                    sum*=sum1;
                }
                printf("%d",sum);
            }
        }
        return 0;
    }
    

    现在,openum 的值将在每次循环中正确更新,而不是始终为 0。

    评论

报告相同问题?

问题事件

  • 创建了问题 8月27日

悬赏问题

  • ¥15 Windows Script Host 无法找到脚本文件"C:\ProgramData\Player800\Cotrl.vbs”
  • ¥15 matlab自定义损失函数
  • ¥15 35114 SVAC视频验签的问题
  • ¥15 impedancepy
  • ¥15 求往届大挑得奖作品(ppt…)
  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图