还是数组的使用问题,比424稍微多了些算法,不过经过一些优化,还是很容易就能写出简单易懂的代码的

View Code

//如果大家做过150! = ? 的话,下面的代码很容易就能搞明白了,SO easy!!
#include<stdio.h>
#include<string.h>
void voluation(char st[],int len,int num[])
{
    int i;
    for(i = 0;i < len; i++)
        num[i] = st[len-i-1] - \'0\';
}
int main()
{
    char st1[1000],st2[1000];
    while(gets(st1) != NULL)
    {
        gets(st2);
        int num[1000] = {0}, top = 0, root = 0, i, len1, j, len2, k, _num[1000] = {0};
        len1 = strlen(st1);
        len2 = strlen(st2);
        if(st1[0] == \'0\' || st2[0] == \'0\')
        {
            printf("0\n");
            continue;
        }
        //这里加上这个判断不想后面计算时循环次数太多而占用太多的时间,算是一些优化吧
        if(len1 > len2)
        {
            top = len1;
            voluation(st1,len1,num);
            strcpy(st1,st2);
        }
        else
        {
            top = len2;
            voluation(st2,len2,num);
        }
        k = strlen(st1);
        for(i = 0;i < k; i++)
        {
            for(j = 0;j < top; j++)
            {
                _num[j+i] += num[j]*(st1[k-1-i]-\'0\');
            }
        }
        top += k;
        for(i = 0;i < top; i++)
        {
            _num[i+1] += _num[i]/10;
            _num[i] %= 10;
        }
        while(_num[top] == 0)
            top--;
        for(i = top;i > -1; i--)
            printf("%d",_num[i]);
        printf("\n");
    }
    return 0;
}

版权声明:本文为SDUTYST原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/SDUTYST/archive/2012/07/19/2528810.html