今天的编程中,改了一坨屎山,想分享一下经历。
屎山
上代码!
#pragma once
#include <list>
bool is_prime(int n) {
std::list<int> composite_number;
std::list<int>::iterator x;
for (int i = 2; i <= sqrt(n); i++) {
bool b = false;
for (x = composite_number.begin(); x != composite_number.end(); x++) {
if (*x == i)
b = true;
}
if (b)
continue;
for (int j = 2; j <= n/i; j++) {
composite_number.push_back(i * j);
}
}
int* prime_number = new int[n + 1];
for (int i = 0; i <= n; i++) {
prime_number[i] = i;
}
prime_number[0] = n;
for (x = composite_number.begin(); x != composite_number.end(); x++) {
for (int i = 1; i <= n; i++) {
if (prime_number[i] == *x) {
prime_number[i] = 0;
prime_number[0]--;
}
}
}
int a = 0;
for (int i = 1; i <= n; i++) {
if (prime_number[i] != 0 && prime_number[i] != 1)
a = prime_number[i];
}
bool ret;
if (a == n) {
ret = true;
}
else {
ret = false;
}
delete[] prime_number;
return ret;
}
大概浏览一遍,就会发现,这是个找素数的程序。用了数组,似乎可以把素数列出来。但是,最后的输出却是一个代表是否为素数的bool。
没错,这个程序原本的功能就是列出不大于输入的数的一切素数,然而因为某些需要,又被改为了判断素数。基本逻辑就是判断数组最后一个数是否等于输入的数。很显然,功能太冗余了。
改进
能用就行!不改了,再见!
开玩笑的。
不改了,直接重写!
#pragma once
bool is_prime(int n)
{
if (n <= 1)
return false;
for (int i = 2; i * i <= n; i++)
if (n % i == 0)
return false;
return true;
}
多好啊!那40几行干嘛用的?
反思
这一个小小的屎山改进,也能看出一些东西。
1.我有多不愿意改原来的代码;
2.我有多不愿意写注释;
3.我有多不愿意再多写一点。So,bye~