我醉了,为什们我的代码这么笨拙?
首先,看看别人的代码@Ethan.
/*别人的水仙花数*/
#include <stdio.h>
//#include <math.h>
int pow(m, n) {
int j, s = 1;
for (j = 1; j <= n; j++) {
s *= m;
}
return s;
}
int main() {
int n, m;
scanf("%d", &n);
int x = 0;
for (x = pow(10, n - 1); x < (pow(10, n)); x++) {//避免两个判断条件,程序会更简洁
int b = x; //保存x的值
int sum = 0, a = 0, i;
for (i = 1; i <= n; i++) {//i的作用是根据位数来执行程序
a = b % 10; //a是x的最后一位
b /= 10; //b不段除10去掉后一位
sum += pow(a, n);
}
if (sum == x) {
printf("%d\n", x);
}
}
return 0;
}
怎么样,非常简洁,好,再看看我的
/*水仙花数*/
#include <stdio.h>
#include <math.h>
int shui(int j, int n);
int main() {
int n, count = 1;
long int j = 0;
scanf("%d", &n);
int t;
t = n;
while (t > 1) {
count *= 10;
t--;
}
for (; j < count * 10; j++) { //应对break,让j再进入for循环
for (; j >= count && j < count * 10; j++) { //j++保证没有进入if后,继续进行
if (shui(j, n) == j ) {
printf("%d\n", j);
break;
}
}
}
return 0;
}
int shui(int j, int n) {//j=1,n=3
int sum = 0;
if (j != 1 && n == 1)
return 0;
int count0 = 1, t;
t = n; //判断什么时候要保存变量,看它后面要不要用
while (t > 1) {
count0 *= 10;
t--;
}
int digt, ret = 0;
digt = j;
while (count0 > 0) {
ret = digt / count0;
digt = digt % count0;
sum += pow(ret, n);
count0 /= 10;
//i0 /= 10;
}
if (j == sum)
return sum;
return 0;
}
我的天,我敢不敢再笨拙一点?为什们非要看了题目叙述从第一位开始算??看看别人,‘%10’用的多么巧妙,我真的。。。6.
咱就是说,别再那么死板了,写东西要简单,创新!!