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 @   Gifur  阅读(555)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
TOP
点击右上角即可分享
微信分享提示