斐波那契数列 ORZ 本菜鸡给您跪了

本菜鸡苦苦挣扎,去看了一下大数加法,然而本菜鸡依然还是不会灵活运用,在写斐波那契数列的题目时依然给跪了。这就是我一直是菜鸡的原因,很多时候觉得自己很不合适学编程语言,害,还是坚持一下下吧。要是能重来,我依旧还是想做一个学编程的小白!

大整数加法
#include <iostream>
#include <string>
#include <bits/stdc++.h>
#define N 1001
using namespace std;

int main()
{

    int maxl;
    int d;//进位数值
    int m,q,k;//for循环需要用到的变量
    char s1[N],s2[N];
    int a[N]={0},b[N]={0},c[N]={0};//数组初始化
    cin>>s1>>s2;
    int len1,len2,len3;
    len1=strlen(s1); //获取字符数组的长度
    len2=strlen(s2);
    maxl=max(len1,len2); //确定长度最长的字符
    for(q=0,m=len1-1;q<len1;q++,m--)
    {
        a[q]=s1[m]-48;//字符型转化成整型
    }
    for(q=0,m=len2-1;q<len2;q++,m--)
    {

        b[q]=s2[m]-48;
    }

    for( k=0,d=0;k<maxl;k++)
    {

        c[k]=(a[k]+b[k]+d)%10; //各各位的数字
        d=(a[k]+b[k]+d)/10;   //求进位的数值

    }
    if(d!=0)  //判断最后是否进位
		  {
		  	c[maxl]=1;
		  	for(len3=maxl;len3>=0;len3--)
		  	{
		  		printf("%d",c[len3]);
			  }
		  }
		  else {
		  	for(len3=maxl-1;len3>=0;len3--)
		  	{
		  		printf("%d",c[len3]);
			  }
		  }

		  return 0;
}

斐波那契数列

#include<bits/stdc++.h>
using namespace std;
int m=1;//m是数字数值的位数
void add(int x[],int y[]);  //一个相加的函数
void print(int x[]);   //一个打印的函数
int main()
{
    int n;
    cin>>n;
    int a1[100001]={0,1};
    int a2[100001]={0,1};
    for(int i=3;i<=n;i++)
    {
    if(i%2)
        add(a1,a2);
    else add(a2,a1);
    }

    if(n%2)
        print(a1);
    else print(a2);
}
void add(int x[],int y[])
{
    for(int i=1;i<=m;++i)     //加数多少位循环多少次
    {
        x[i]=x[i]+y[i];//所求项等于前面两项之和
        if(x[i]>=10) //判断相加是否进位
        {
            x[i]%=10;
            ++x[i+1];    //进位就加上1
        }
        if(x[m+1]) //进位m+1
            m++;
    }

}
void print (int x[])
{
    for(int i=m;i>=1;--i)
    {

        cout<<x[i];
    }

}

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值