537 - Artificial Intelligence未通过

本文对比分析了两种C++代码实现方式,通过具体实例展示了如何利用istringstream处理输入数据,以及如何更高效地读取字符串中的特定字符。详细介绍了两种方法在读取和处理数据时的不同之处,包括使用fgets()和getline()函数结合scanf()与getchar()的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//未通过,重点掌握:istringstream的用法。 //整形和getline()或者(fgets())结合使用时要用getchar()来做区别 /*#include <stdio.h> #include <string.h> #include <ctype.h> #include <stdlib.h> #define MAX 105 int main() { struct { char Concept; char Prefix; double data; }s[2]; int n; scanf("%d",&n); getchar(); for(int cas=1;cas<=n;cas++) { char buf[MAX]; char str[20]; int slen=0; fgets(buf,sizeof(buf),stdin); int len=strlen(buf); int flag=0; int j=0; for(int i=0;i<len;i++) { if((buf[i]=='I'||buf[i]=='U'||buf[i]=='P') && buf[i+1]=='=') { s[j].Concept=buf[i]; flag=1; i++; continue; } if((!isdigit(buf[i])&&buf[i]!='.') && flag==1) { flag=0; str[slen]='\0'; s[j].data=atof(str); s[j].Prefix=buf[i]; slen=0; j++; continue; } if(flag==1) { str[slen++]=buf[i]; } } for(int k=0;k<2;k++) { switch(s[k].Prefix) { case 'm': s[k].data*=1e-3; break; case 'k': s[k].data*=1e3; break; case 'M': s[k].data*=1e6; break; default: break; } } printf("Problem #%d\n",cas); if((s[0].Concept=='U' && s[1].Concept=='I') || (s[0].Concept=='I' && s[1].Concept=='U')) { printf("P=%.2lfW\n",s[0].data*s[1].data); } else if(s[0].Concept=='P' && s[1].Concept=='U') { printf("I=%.2lfA\n",s[0].data/s[1].data); } else if(s[0].Concept=='P' && s[1].Concept=='I') { printf("U=%.2lfV\n",s[0].data/s[1].data); } else if(s[1].Concept=='P' && s[0].Concept=='U') { printf("I=%.2lfA\n",s[1].data/s[0].data); } else if(s[1].Concept=='P' && s[0].Concept=='I') { printf("U=%.2lfV\n",s[1].data/s[0].data); } printf("\n"); } return 0; }*/ //c++ 心如止水 #include<iostream> #include<sstream> #include<string> #include<cstdio> using namespace std; int main() { int n; cin>>n; getchar(); for(int cas=1;cas<=n;cas++) { string line; getline(cin,line); istringstream sin(line); double P(-1.0),U(-1.0),I(-1.0); char ch; while(sin>>ch) { char t; if(ch=='P') { sin>>t; if(t!='=') continue; sin>>P; sin>>t; if(t=='m') P*=1e-3; else if(t=='k') P*=1e3; else if(t=='M') P*=1e6; } else if(ch=='U') { sin>>t; if(t!='=') continue; sin>>U; sin>>t; if(t=='m') U*=1e-3; else if(t=='k') U*=1e3; else if(t=='M') U*=1e6; } else if(ch=='I') { sin>>t; if(t!='=') continue; sin>>I; sin>>t; if(t=='m') I*=1e-3; else if(t=='k') I*=1e3; else if(t=='M') I*=1e6; } } printf("Problem #%d\n",cas); if(P==-1.0) printf("P=%.2lfW\n",U*I); else if(U==-1.0) printf("U=%.2lfV\n",P/I); else if(I==-1.0) printf("I=%.2lfA\n",P/U); printf("\n"); } return 0; }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值