Fork me on GitHub

SCAU 8629 热身游戏(高精度)

8629 热身游戏

时间限制:500MS  内存限制:1000K 提交次数:2 通过次数:1

题型: 编程题   语言: 无限制

Description

    ACM 程序设计竞赛是一项激励人心的竞赛,除了考验大家的编程功底,更多的是考验大家的思维以
及数学运算能力。开赛前15分钟,我们华农的某队开始了以下对话:
ipc:“我们玩接龙热一下身吧!免得一会没睡醒。”
Arokenda:“好啊!没问题!怎么玩?”
ipc:“我先写两个数,然后你我轮流接着已经写好的数列继续写数,每人写1 个数。接龙的规则就是,
下一个数是前两个数的和。”
Arokenda:“这还不简单!不就是Fibonacci数列嘛。绝对秒杀啦!”
    此时,ipc 开始写数:1、3。居然不是Fibonacci 数列!下一个就是4 啦!接着数列成型了:1、3、
4、7、11、18……一直写了N 项,ipc 觉得热身还不够。于是他忽然说了句:“求前N 项和怎么样?”两
个人顿时“卡”了一下……
若ipc写出数列的前两项以及项数,你能算出来吗?

Input

输入一个整数T(T<=20),表示ipc写了T个数列。
接下来T行, 每行三个整数, 分别为a1,a2,n , 分别表示该数列的前两项和项数。其中0<a1,a2,n<=1000

Output

每组数据输出一行,该数列的前n项和sum(n)。

Sample Input

3
1 2 15
1 1 10
2 2 10

Sample Output

2582
143
286

Hint


Source

朱伟琛

Provider

admin

 

#include<stdio.h>
#include<string.h>
int main()
{
    int T, n1[1000], n2[1000], n[1000], m[1000],temp, e, m1len, m2len, i, j, sum;
    char m1[1000], m2[1000];
    scanf("%d", &T);
    while(T--)
    {
        memset(m1, 0, sizeof(m1));
        memset(m2, 0, sizeof(m2));
        memset(m, 0, sizeof(m)); 
        memset(n1, 0, sizeof(n1));
        memset(n2, 0, sizeof(n2));
        memset(n, 0, sizeof(n));
        scanf("%s%s%d", m1, m2, &sum);
        if(sum == 1) {printf("%s\n", m1); continue;}
        m1len = strlen(m1); m2len = strlen(m2);
        for(i=m1len-1; i>=0; --i) n[i] = n1[i] = m1[m1len-1-i]-'0';
        for(i=m2len-1; i>=0; --i) n2[i] = m2[m2len-1-i]-'0';
        for(i=2,e=0; i<=sum; ++i)
        {
            for(j=0; j<1000; ++j)
            {
                m[j] = n2[j];
                temp = (n[j] + n2[j] + e);
                n[j] = temp%10;
                e = temp/10;
            }
            for(j=0,e=0; j<1000; ++j)
            {
                temp = (n1[j] + n2[j] + e);
                n2[j] = temp%10;
                e = temp/10;
            }
            
            for(j=0; j<1000; ++j)  n1[j] = m[j];
            
        }
        for(j=999; !n[j] && j>0; --j);
        for(; j>=0; --j) printf("%d", n[j]);
        printf("\n");
    }
    return 0;
}

解题报告:
#高精度#

建立在Fabionacci上,进行大数相加的运算。

输入[ 1 1 100]用unsigned long long 已经不能满足,更何况是[1000 1000 1000],经过多次的联系后,改变了以往的小心翼翼计算字符串长度而频繁用strlen函数,这

次索性开大数组,很快就过了,不然要在整型数组和字符数组之间转换,会浪费较多的时间(只因为strlen)

posted @ 2012-11-17 12:59  Gifur  阅读(549)  评论(0编辑  收藏  举报
TOP