【发布时间】:2015-09-07 13:38:45
【问题描述】:
编辑: 我替换: 进位 = (x-(x%10))%10; 经过: 进位 = x/10;
我在while循环的末尾添加了addition(): 如果(进位) f3[i] = 进位;
感谢 FalconUSA 和 M_Oehm ! :)
我正在处理 Project Euler 的第 25 题(小心剧透),虽然斐波那契函数并不是真正的问题,但我很难实现一种存储大量数字的方法(比如 1000 位数字)。
所以我已经尝试(正如我在网上了解到的)用数组来处理它,但是程序无限期地运行。 我的问题可能是 in addition() 或 length()。
有什么想法吗?
#include <stdio.h>
#include <string.h>
int length(int *nbr) // number of digits of my number
{
int len = 0, c = 0;
while(nbr[c] >= 0) {
len++;
c++;
}
return len;
}
int addition(int *f1, int *f2, int *f3, int siz) // add f1+f2 and store it in f3
{
int carry =0, i =0;
int x;
memset ( f3, -1, siz*sizeof(int));
while ( (f1[i] >= 0) || (f2[i] >= 0) ) {
if(f1[i]<0) {
x = f2[i] + carry;
}
else if(f2[i]<0) {
x = f1[i] + carry;
}
else {
x = f1[i] + f2[i] + carry;
}
f3[i] = x%10;
carry = (x-(x%10))%10;
i++;
}
return 0;
}
int copy_arr(int *dest, int *or, int siz) //copy array "or" into "dest"
{
int c = 0;
memset( dest, -1, siz*sizeof(int));
while( c < siz ) {
dest[c] = or[c];
c++;
}
return 0;
}
int fibo(int siz) //fibonacci function
{
int f1[siz],f2[siz],f3[siz];
memset( f1, -1, siz*sizeof(int));
memset( f2, -1, siz*sizeof(int));
memset( f3, -1, siz*sizeof(int));
int n = 2;
f1[0] = f2[0] = 1;
while (length(f1) <= siz) {
n++;
addition( f1, f2, f3, siz);
copy_arr( f2, f1, siz);
copy_arr( f1, f3, siz);
}
printf("%d\n", n);
return 0;
}
int main() // siz's value is the number of digits I desire for my fibonacci number
{
int siz=1000;
fibo(siz);
return 0;
}
【问题讨论】:
-
要终止此条件
while ( (f1[i] >= 0) || (f2[i] >= 0) ) {,两个部分必须同时为 -
F6 = 8;和 F7 = 13。所以我想是的,可以有不同的位数。
-
提示:您无需编写程序即可找到答案。
-
请从您的标题和问题中删除“已解决”。您可以自行发布答案,甚至接受它。对于有类似问题的其他人来说,这是正确的指示。