女士时尚包包批发市场:急啊~~~超急~~麻烦帮忙啊,C语言编程高手请进

来源:百度文库 编辑:查人人中国名人网 时间:2024/04/28 20:12:29
用指向指针的方法对n个字符串排序并输出。
用C语言编写~~~
字符串不能在指针数组申明是定义,而是要输入。
希望能快点解答~~~
谢谢~~~

#include <stdio.h>

#define N 6000

int main(void)
{
char arr[N] = "1"; /* 每次乘以阶乘中的一个因数的结果,逆序存储 */
char res[N] = "0"; /* 阶乘的总和的总结果,逆序存储 */
int j,k,m;
int left; /* 得数的十位数 */
int temp;
int n = 21; /* 最的是n以内的所有数的阶乘的和,不包括n */

left = 0; /* 第一个得数的十位数为零 */
for (j = 1;j < n;j++)
{

/* 求arr乘以j的结果 */
for(k = 0;arr[k] != '\0';k++) /* 对arr中的每一个数乘以j,并且把结果的十位数加到下一个数中去 */
{
temp = (arr[k] - '0') * j + left;
arr[k] = temp % 10 + '0';
left = temp / 10;
}

/* 当最后一个数的十位数不是零的时候,要把这个十位数直接加到结果的下一位去 */
while (left != 0)
{
arr[k++] = left % 10 + '0';
left /= 10;
}
arr[k] = '\0'; /* 字符串应该以'\0'结束 */

/* 把当次阶乘的结果加到res中去,这样做可以避免多次求同一个数的阶乘 */
m = 0;
while (res[m] != '\0' && arr[m] != '\0') /* 当res和arr都还没有到达结束的时候 */
{
temp = arr[m] - '0' + res[m] - '0' + left; /* 计算出对应位数的对应十进制数的和,要记得加上从低位进上来的数 */
res[m] = temp % 10 + '0'; /* 把temp的个位数对应的十进制数作为当前位的结果 */
left = temp / 10; /* 并且计算出作为进位的值 */
m++; /* 处理一下位 */
}

/* 如果arr的位数没有res多的话,就要继续处理res中剩下的数,并注意上面的计算中留下来没有加的进位数 */
while (res[m] != '\0')
{
temp = res[m] - '0' + left; /* 把res中剩下的数加上从低位中进位的数 */
res[m] = temp % 10 + '0'; /* 把temp的个位数对应的十进制数作为当前位的结果 */
left = temp / 10; /* 并且计算出作为进位的值 */
m++; /* 处理下一位 */

}

/* 如果res的位数没有arr多的话,就要继续处理arr中剩下的数,并注意上面的计算中留下来没有加的进位数 */
while (arr[m] != '\0')
{
temp = arr[m] - '0' + left;
res[m] = temp % 10 + '0';
left = temp / 10;
m++;
}

res[m] = '\0'; /* 字符串应该以'\0'结束 */
}

printf("1! + 2 ! + ... + %d! = ",n - 1);
k = m - 1;
while (k >= 0)
{
printf("%c",res[k]);
k--;
}
printf("\n");
return 0;
}

计算结果是:2561327494111820313