@sensitive-cs
        
        2016-11-21T15:24:30.000000Z
        字数 1523
        阅读 1126
    历程
今天学习了最长回文子串和高精度乘法,6174问题
#include <stdio.h>int a[4000];int main(void){int n;int i = 0,j = 0;scanf("%d",&n);a[0] = 1;for (i = 2;i <= n;i++){int c = 0;for (j = 0;j <= 4000;j++){a[j] = a[j] * i + c;c = a[j] / 10;a[j] %= 10;}}for (j = 3999;j >= 0;j--) if (a[j]) break;for (i = j;i >= 0;i--)printf("%d",a[i]);printf("\n");return 0;}
6174:
#include <stdio.h>#include <string.h>int ans[1005];int get_next(int x){char a[10];sprintf(a,"%d",x);int i,j;int b,c;int m = strlen(a);for (i = 0;i < m;i++){for (j = i + 1;j < m;j++){if (a[i] > a[j]){char t = a[i];a[i] = a[j];a[j] = t;}}}sscanf(a,"%d",&b);for (i = 0;i < m / 2;i++){char t = a[i];a[i] = a[m - 1 - i];a[m - 1 - i] = t;}sscanf(a,"%d",&c);return c - b;}int main(void){int x;int lenth = 0;int flag = 1;scanf("%d",&x);ans[0] = x;while (flag){int t = get_next(ans[lenth]);int j;for (j = 0;j <= lenth;j++){if (ans[j] == t){flag = 0;printf("%d -> %d\n",t,t);break;}}if (flag){ans[++lenth] = t;printf("%d - >",ans[lenth-1]);}}return 0;}
这题刘汝佳用的是一个数组就解决问题,貌似我也是,233333,但是解法不一样。。。
想要说明的是对于最长回文字串的下标,采取手算,手算万岁。 
Orz,刘汝佳
还有字母重排,算竞78页(远古)
#include <stdio.h>#include <stdlib.h>#include <string.h>char a[100][20];void tosard(char *ch){int i,j;for (i = 0;i < strlen(ch);i++){for (j = i + 1;j < strlen(ch);j++){if (ch[i] > ch[j]){char t = ch[i];ch[i] = ch[j];ch[j] = t;}}}}int main(void){int i = 0,j,k;char b[20];while (scanf(" %s",a[i]) != EOF && a[i][0] != '*')i++;for (j = 0;j < i;j++){for (k = j + 1;k < i;k++){if (strcmp(a[j],a[k]) > 0){char p[20];strcpy(p,a[j]);strcpy(a[j],a[k]);strcpy(a[k],p);}}}while (scanf(" %s",b) != EOF){char c[20];strcpy(c,b);tosard(c);for (j = 0;j < i;j++){char d[20];strcpy(d,a[j]);tosard(d);if (strcmp(c,d) == 0)printf("%s ",a[j]);}}return 0;}
略显繁琐,lrj的代码用到了qsort,值得学习。