赞
踩
- #include<iostream>
- #include<string>
- #include<iomanip>
- using namespace std;
- int main() {
- int t;
- cin >> t;
- while (t--) {
- double C = 12.01, H = 1.008, O = 16.00, N = 14.01;
- double z;
- int w;
- double sum = 0.0;
- char x[100];
- cin >> x;
- for (int i = 0; x[i]; i++) {
- if (x[i] == 'C') {
- z = C;
- }
- else if (x[i] == 'H') {
- z = H;
- }
- else if (x[i] == 'O')
- {
- z = O;
- }
-
- else if (x[i] == 'N') {
- z = N;
- }
-
- if ((x[i + 1] - '0') > =1 && (x[i + 1] - '0' <= 9)) {
- w = x[i + 1] - '0';
- i++;
- if ((x[i + 1] - '0') >= 1 && (x[i + 1] - '0') <= 9) {
- w = w * 10 + (x[i + 1] - '0');
- i++;
- }
- }
- else { w = 1; }
- sum += w * z;
- }
- cout << fixed << setprecision(3) << sum << endl;
- }
- return 0;
- }
也是改了小两天,然后说一下核心代码逻辑两大块的核心
第一个是有四个字母然后把for循环中匹配到的字母进行确认到z里面后面进行
第一大逻辑
第二的大逻辑就行下面的if那个三大判断条件第一个是一位数并且是大于1的小于10的
x然后是大于10的就是二位数
第三个就是没有数字的就是1的
然后代码具体要考虑i++每次进行i++自动i++这样避免算完字母后碰到数字然后会多算一次字母。就是一位算数字后i++如果【i+2】就是匹配到两位数的话再次i++;这样可以有效避免数字越界(你可以好好思考一下)如果都没有就是1直接定义1即可。好了没了感谢观看。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。