网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
04月07日漏签0天
c++吧 关注:655,712贴子:2,118,233
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 9回复贴,共1页
<<返回c++吧
>0< 加载中...

请教一个算法

  • 只看楼主
  • 收藏

  • 回复
  • liumx10
  • ?:
    4
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
求斐波那契数列的第N项。输入N。输出第N项的值。如果N比较小的时候,直接递推就可以了。但是如果N特别大,超过一千万怎么办?


  • liumx10
  • ?:
    4
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
求指导啊求指导啊求指导啊求指导啊


2026-04-07 02:47:40
广告
不感兴趣
开通SVIP免广告
  • 乃儿不花
  • &
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
通项公式可以不


  • 安适又独特丶风光0F
  • =
    2
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
高精度加法。


  • 安适又独特丶风光0F
  • =
    2
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
btw, 超过一千万的话也得实现高精度的浮点乘法和快速求幂,精度是硬伤。


  • 俄风不09
  • &&
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
可以这样#include <iostream>
using namespace std;
void getvalue(int &value,int t)
{
if(t==1||t==2) {value=1;return ;}
int v1=1,v2=1;
for(int i=2;i<t;i++)
{
value=v1+v2;
v1=v2;
v2=value;
}
}
int main()
{
int value=1;
for(int i=1;i<10;i++)
{
getvalue(value,i);
cout<<value<<' ';
}
cout<<endl;
return 0;
}


  • 俄风不09
  • &&
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
这样就行,只要你的MAX_SIZE够大就能实现,不过10000000的话感觉用vector更快点……
#include <iostream>
using namespace std;
#define MAX_SIZE 1000 //十进制位数,用每个整数代表一位数,虽然浪费,但比较好操作
void init(unsigned value[]) //initiate the variable arr
{
for(int i=0;i<MAX_SIZE;i++)
*(value+i)=0;
}
void real(unsigned value[]) //判定,使每个数都为0-9
{
for (int i=0;i<MAX_SIZE-1;i++)
{
if(*(value+i)>9)
{
*(value+i)=(*(value+i))-10;
(*(value+i+1))=(*(value+i+1))+1;
}
}
}
void add(unsigned value1[],unsigned value2[],unsigned value3[])//两者的数相加的值赋为前者
{
for (int i=0;i<MAX_SIZE;i++)
{
*(value1+i)=*(value2+i) + *(value3+i);
}
real(value1);
}
void assign_value(unsigned value1[],unsigned value2[])//赋值,后者的数赋为前者
{
for (int i=0;i<MAX_SIZE;i++)
{
*(value1+i)=*(value2+i);
}
}
void show(unsigned value[]) //显示
{
unsigned i; //记录下标
for (i=MAX_SIZE-1;i>0;i--) //前缀为零的不显示
{
if(*(value+i)!=0)
break;
}
for (int t=0;t<=i;t++)
{
cout<<*(value+i-t);
}
cout<<' ';
}
void getvalue(unsigned value[],unsigned t)
{
if(1==t||2==t)
{
*(value+0)=1;return ;
}
unsigned value1[MAX_SIZE]={0}; *(value1+0)=1; //the first parameter
unsigned value2[MAX_SIZE]={0}; *(value2+0)=1; //the second parameter
for(int i=2;i<t;i++)
{
add(value,value2,value1);
assign_value(value1,value2);
assign_value(value2,value);
}
}
int main()
{
unsigned value[MAX_SIZE]={0};
for (int i=1;i<=10000;i++)
{
init(value);
getvalue(value,i);
show(value);
cout<<endl;
}
return 0;
}


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 9回复贴,共1页
<<返回c++吧
分享到:
©2026 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示