习题3-2 UVa 1586 Molar Mass
2015-11-01 10:57
267 查看
难点:
C123H5OH12—- 下标出现多位数的情况
要点:
1.另设一个getnum函数,当字符串出现数字转入,由此输出多位数的情况
源代码:
学习心得:
1.一个个判断相加较麻烦,可以先将要加的值输入数组,通过数组提高效率
2.可利用flag变量来判断真假情况,temp变量来储存已确定的变化的值如i
C123H5OH12—- 下标出现多位数的情况
要点:
1.另设一个getnum函数,当字符串出现数字转入,由此输出多位数的情况
源代码:
#include<stdio.h> #include<string.h> const int maxn=200; char s[maxn]; //s和ans数组定义在头文件可以在下面所有函数使用 double ans[maxn]; int getnum(int pos, int len) { int temp; for (int i = pos; i < len; i++) { if (s[i] >= '0'&&s[i] <= '9') temp = i; //使temp等于数字下标末尾的数组值 else break; } int sum = 0; for (int i = pos; i <= temp; i++) { sum = sum * 10 + (s[i] - '0'); } return sum-1; //易错:必须输出sum-1,因为如C13中前面C已经算了一次,后面13又算了13次,因此应减1输出 } int main() { int t; scanf("%d", &t); while (t--) { memset(ans, 0, sizeof(ans)); scanf("%s", s); int len = strlen(s); int flag = 0; for (int i = 0; i < len; i++) { if (s[i] == 'C') ans[i] = 12.01;//通过将值都赋予ans计算 if (s[i] == 'O') ans[i] = 16.00; if (s[i] == 'H') ans[i] = 1.008; if (s[i] == 'N') ans[i] = 14.01; if (s[i] >= '0'&&s[i] <= '9'&&flag==0) { ans[i] = ans[i - 1] * getnum(i, len); flag = 1; //flag的作用是防止前面已经是数字 } if (!(s[i] >= '0'&&s[i] <= '9')) flag = 0; } //flag为0说明前面是字符不是数字,才能进入数字判断 double sum_s = 0; for (int i = 0; i < len; i++) sum_s = sum_s + ans[i]; printf("%.3lf\n", sum_s); } return 0; }
学习心得:
1.一个个判断相加较麻烦,可以先将要加的值输入数组,通过数组提高效率
2.可利用flag变量来判断真假情况,temp变量来储存已确定的变化的值如i
相关文章推荐
- 【Leetcode】之Longest Common Prefix
- Packet for query is too large (1986748 > 1048576). You can change this value on the server by
- git总结(三)修改提交的author和email
- mac工具--通过 arp 欺骗抓取局域网内设备数据包
- git总结(二)----常用命令
- Class类文件的结构
- tomcat源码学习1------源码下载和编译
- hdu 5514 Frogs 2015沈阳区域赛 数论 欧拉 好题 开心的题
- Sqlite数据库及在iOS程序中如何写入和读取数据库数据
- 百岁老人多出生在什么季节
- MapReduce工作原理
- LeetCode----Remove Duplicates from Sorted List II
- ResourceBundle读取配置文件
- 信息安全系统设计基础第八周期中总结
- git总结(一)---撤销修改
- UESTC Pick The Sticks (背包变形)
- 未来的发展(从Davin的演讲说开去)
- Ubuntu 下安装好 Wireshark 却找不到 Interface 的解决办法
- Android Activity的4种启动模式
- android集成微信支付记录