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