NYOJ597 完数?
#include <stdio.h> int main(){ int n; while(scanf("%d", &n), n != -1) if(n == 6) printf("6=1+2+3\n"); else if(n == 28) printf("28=1+2+4+7+14\n"); else if(n == 496) printf("496=1+2+4+8+16+31+62+124+248\n"); else if(n == 8128) printf("8128=1+2+4+8+16+32+64+127+254+508+1016+2032+4064\n"); else printf("No\n"); return 0; }
再放一个RE的错误代码:
错误原因是数组溢出。引以为戒。
#include <stdio.h> int main(){ int n, a[20], count, ok, s; while(scanf("%d", &n), n != -1){ count = ok = s = 0; for(int i = 1; i != n; ++i) if(n % i == 0){ s += i; a[count++] = i; } if(s == n) ok = 1; if(!ok) printf("No\n"); else{ printf("%d=%d", n, a[0]); for(int i = 1; i != count; ++i) printf("+%d", a[i]); printf("\n"); } } return 0; }