c语言输出大数,C语言实现 输出斐波拉契数列第n项(大数加法)

Loading...

刷学校OJ,刷了几题遇到个斐波拉契数列的题目,自认为很简单,用了int型去处理,但是结果总时不对,因为斐波拉契后面的值太大了,OJ要求输出1000项大,用long long都不能处理,于是询问了学长,得知了大数运算,并且学习了大数加法,经过了各种查资料以及相关测试,最终写出了以下代码,并且AC。

原题:![原题][1]

#define N 500

void full(int n1[N], int n2[N]) //用于数组的赋值 把n2赋值给n1

{

for (int i = 0; i < 500; i++)

{

n1[i] = n2[i];

}

}

int main()

{

int n = 0;

while (scanf("%d", &n) && n) //输入项数并且为0时结束

{

int t1[N] = { 0 };

int t2[N] = { 0 };

int sum[N] = { 0 };

int temp[N] = { 0 }; //空数组,用于清零数组的

t1[0] = t2[0] = 1;

for (int i = 2; i < n; i++)

{

for (int k = 0; k < N; ++k)

{

sum[k] += t1[k] + t2[k];

if (sum[k] > 9)

{

sum[k + 1]++;

sum[k] -= 10;

}

}

full(t1, t2); //t2给t1

full(t2, sum); //sum 给t2

full(sum, temp); //再把sum清零

}

for (int i = N-1; i >= 0; i--) //输出

{

if (t2[i] != 0)

{

for (int k = i; k >= 0; k--)

printf("%d", t2[k]);

printf("\n");

break;

}

}

}

return 0;

}

如上代码,N表示最高支持的长度,我这设置成了500(题目表示1000位数以内),不够可以加。

这段代码中还写了一个full函数,用于进行数组的赋值的(我们知道数组之间是不能直接赋值的)。

相关的东西注释也写的比较清楚了。

有更好的思路也会再次总结。

学长表示把int数组转换为字符串可以更加高效率,以后再研究了。

[1]: https://www.oylong.com/usr/uploads/2018/10/1.jpg

最后修改:2019 年 02 月 26 日 07 : 13 PM

© 允许规范转载

赞赏

如果觉得我的文章对你有用,请随意赞赏

×Close

赞赏作者

扫一扫支付

png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAABS2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxMzggNzkuMTU5ODI0LCAyMDE2LzA5LzE0LTAxOjA5OjAxICAgICAgICAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIi8+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgo8P3hwYWNrZXQgZW5kPSJyIj8+IEmuOgAAAA1JREFUCJljePfx038ACXMD0ZVlJAYAAAAASUVORK5CYII=

png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAABS2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxMzggNzkuMTU5ODI0LCAyMDE2LzA5LzE0LTAxOjA5OjAxICAgICAgICAiPgogPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIi8+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgo8P3hwYWNrZXQgZW5kPSJyIj8+IEmuOgAAAA1JREFUCJljePfx038ACXMD0ZVlJAYAAAAASUVORK5CYII=

支付宝支付

微信支付

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值