当前位置: 首页 > news >正文

c++编程:科学计数法(1024-PAT乙级)

PAT乙级-1024:科学计数法

string t = s.substr(1, i-1);

s:科学计数法字符串,例如 "+1.23400E-03"
i:字符 'E' 在字符串中的位置索引
s.substr(1, i-1):从索引 1 开始,取 i-1 个字符

输入字符串 si (E的位置)s.substr(1, i-1)结果 t
"+1.234E+3"6从索引1取5个"1.234"
"-1.2E-5"5从索引1取4个"1.2"
"+1E+2"3从索引1取2个"1"

1. 只指定起始位置(提取到末尾)

string s = "Hello World"; string t = s.substr(6); // 从索引6开始到末尾 cout << t; // 输出 "World"

2. 指定起始位置和长度

string s = "Hello World"; string t = s.substr(0, 5); // 从索引0开始,取5个字符 cout << t; // 输出 "Hello"

3. 提取中间部分

string s = "Hello World"; string t = s.substr(6, 3); // 从索引6开始,取3个字符 cout << t; // 输出 "Wor"

stoi()— 字符串转整数函数

string sub = "+4"; int n = stoi(sub); // n = 4

to_string()— 将数字类型转换为字符串

int num = 456; string str = to_string(num); // str = "456"
#include<bits/stdc++.h> using namespace std; int main() { string s; // 定义字符串 s,用于存储科学计数法表示的数值 cin >> s; // 输入科学计数法字符串,格式如 "+1.23400E-03" int i = 0; // 初始化索引 i while(s[i] != 'E') { // 找到字符 'E' 的位置 i++; // 索引递增,直到遇到 'E' } // 循环结束后,i 就是 'E' 字符的索引位置 // 提取底数部分(不包含符号和 'E') // substr(1, i-1):从索引1开始,长度为 i-1,跳过第0位的符号位 string temp = s.substr(1, i-1); // 提取指数部分,从 'E' 后面开始,转换为整数 int n = stoi(s.substr(i+1)); // 处理底数的符号(科学计数法的第一位是正负号) if(s[0] == '-') cout << '-'; // 如果是负数,先输出负号 // ========== 情况1:指数为负数(小数点向左移动) ========== if(n < 0) { cout << "0."; // 输出 "0." 前缀 // 输出 abs(n)-1 个前导零 // 例如 n=-3,则输出 2 个零 for(int k = 0; k < abs(n) - 1; k++) { cout << '0'; } // 输出底数部分的所有数字(跳过小数点) // temp 格式如 "1.234",j从2开始跳过 "1." for(int j = 2; j < temp.length(); j++) { cout << temp[j]; // 输出 '2','3','4'... } } // ========== 情况2:指数为非负数(小数点向右移动) ========== else { cout << temp[0]; // 输出底数的整数部分(小数点前的数字) // 子情况2.1:指数足够大,不需要小数点 // temp.length() - 2 是底数的小数部分位数 if(n >= temp.length() - 2) { // 输出全部小数部分 for(int k = 2; k < temp.length(); k++) { cout << temp[k]; } // 补零:需要补 n - 小数部分位数 个零 for(int k = 0; k < n - (temp.length() - 2); k++) { cout << '0'; } } // 子情况2.2:指数不够大,需要加小数点 else { // 输出前 n 位小数部分 for(int k = 2; k < 2 + n; k++) { cout << temp[k]; } // 输出小数点 cout << '.'; // 输出剩余的小数部分 for(int k = 2 + n; k < temp.length(); k++) { cout << temp[k]; } } } return 0; }

指数足够大(不需要小数点)

+1.234E+4
int main(){ string s; cin >> s;// 输入: +1.234E+4int i = 0; while(s[i] != 'E') { i++; // i=1,2,3,4,5,6 (最终 i=6) } string temp = s.substr(1, i-1);// temp = "1.234"int n = stoi(s.substr(i+1));// n = 4if(s[0] == '-') cout << '-'; // s[0]='+',不输出 if(n < 0) { // n=4 ≥0,进入 else // 负数指数分支(不执行) } else { cout << temp[0];// 输出 '1' → 输出: "1"if(n >= temp.length() - 2) { // temp.length()=5, 5-2=3, 4>=3 为真 for(int k = 2; k < temp.length(); k++) { cout << temp[k];// 依次输出 temp[2]='2', temp[3]='3',temp[4]='4' }// 输出 "234" → 当前输出: "1234"for(int k = 0; k < n - (temp.length() - 2); k++) { cout << '0';// n-(5-2)=4-3=1,输出 1 个 '0'}// 输出 "0" → 当前输出: "12340"} else { // 需要小数点的分支(不执行) } } return 0; // 最终输出: 12340 }

指数不够大(需要小数点)

+1.234E+1
int main(){ string s; cin >> s;// 输入: +1.234E+1int i = 0; while(s[i] != 'E') { i++; // i=1,2,3,4,5 (最终 i=5) } string temp = s.substr(1, i-1);// substr(1,4) → temp = "1.234"int n = stoi(s.substr(i+1)); // s.substr(6) → "+1" →n = 1if(s[0] == '-') cout << '-'; // s[0]='+',不输出 if(n < 0) { // n=1 ≥0,进入 else // 负数指数分支(不执行) } else { cout << temp[0];// temp[0]='1' → 输出 "1"if(n >= temp.length() - 2) { // temp.length()=5, 5-2=3, 1>=3 为假,进入 else // 不需要小数点的分支(不执行) } else { for(int k = 2; k < 2 + n; k++) { // 2+n=3,k=2 到 2 cout << temp[k];// temp[2]='2' → 输出 "2"}// 当前输出: "12"cout << '.';// 输出 '.' → 当前输出: "12."for(int k = 2 + n; k < temp.length(); k++) { // 2+1=3,k=3 到 4 cout << temp[k];// temp[3]='3', temp[4]='4' → 输出"34" }// 当前输出: "12.34"} } return 0; // 最终输出: 12.34 }
http://www.jsqmd.com/news/587483/

相关文章:

  • 华硕笔记本性能优化新选择:GHelper高效硬件控制工具深度解析
  • 阿里通义Z-Image-GGUF功能体验:中英文提示词支持实测
  • 小米智能家居与Home Assistant零门槛实战:从集成到优化全流程指南
  • 如何为你的外贸网站选择最佳网络线路:CN2 vs BGP vs 3C vs 阿里云
  • 利用快马平台与accelerate库,十分钟搭建你的第一个分布式训练原型
  • 从Dirty COW到内核攻防:竞态条件漏洞的现代利用与防御思考
  • 告别Fiddler和Charles,用Proxyman在Android 13上抓HTTPS包(附network_security_config.xml配置)
  • 7个步骤精通智能交易:Binance Trade Bot从配置到实战全指南
  • Picasso设计稿转代码工具全攻略:从安装到精通
  • 从零开始掌握Calcpad:工程计算与文档生成的一体化解决方案
  • 用Python+NumPy手把手实现四足机器人腿部三维运动学(附完整代码与避坑点)
  • 英雄联盟决策加速器:League-Toolkit让你的胜率提升37%的智能辅助系统
  • python小白的第一课:在快马平台借助ai生成代码示例轻松入门基础语法
  • Untrunc终极指南:5步快速修复损坏的MP4视频文件
  • 这款SSD固态硬盘,如何以国产高性价比解决企业数据存储的卡顿难题?
  • 用STM32F103C8T6和HX710做个低成本水质检测仪,附完整代码和校准心得
  • 提升开发效率的超能力:Superpowers 开源项目介绍
  • ICCV2025 | 我在哪里?基于自然语言描述与卫星影像/OSM数据的跨视角地理定位 - MKT
  • 从调包到魔改:深入pytorch-grad-cam源码,定制你自己的CAM可视化方案(以EigenCAM和ScoreCAM为例)
  • 微信小程序用户信息获取新姿势:利用最新API实现一键获取昵称和头像
  • 5分钟掌握waifu2x-caffe:轻松实现动漫图像无损放大
  • ISPRS | ULSR-GS: 港科广等提出基于航空倾斜影像的多视角几何一致性高斯溅射城市重建方法 - MKT
  • 使用快马AI快速构建腾讯qclaw官网交互原型,验证产品设计
  • 效率倍增,使用快马生成ansible playbook自动化部署ubuntu生产服务器
  • 麦橘超然Flux图像生成控制台快速部署:一键启动你的AI绘画服务
  • 保姆级教程:MathWorks Matlab R2020a安装与破解全流程(附常见错误解决)
  • Ostrakon-VL-8B赋能微信小程序:开发餐饮AI点餐助手
  • VTJ.PRO 在线应用开发平台的核心模块(用户、认证、RBAC、缓存、设置)
  • 3步解决学术文档符号显示难题:STIX Two字体全场景应用指南
  • 大数据存储格式深度解析:Parquet、Avro与ORC的性能调优与选型指南