分类讨论,如果是'.'的时候统计前一位开始的数字,最后一位时需要另外讨论
#include<bits/stdc++.h> using namespace std; int main() { string s; int i, d = 0, n = 0, j, l = 1, ok = 1; while(cin >> s) { for(i = 0; ok && i <s.length(); i++) { if(s[i] != '.' && i != s.length()-1) { d++; s[i] -= '0'; } else { if(s[i] == '.') { for(j = i-1; j >= i - d; j--) { n += s[j]*l; l *= 10; } if(n > 255) { ok = 0; } else { ok = 1; } n = 0; d = 0; l = 1; } else if(i == s.length()-1) { d++;//这里容易忽略 s[i] -= '0'; for(j = i; j >= i - d + 1; j--) { n += s[j]*l; l *= 10; } if(n > 255) { ok = 0; } else { ok = 1; } } } } if(ok == 1) { cout << "Yes!" << endl; } else { cout << "No!" << endl; } } return 0; }