高精度加法和高精度比较。
以下是我的代码:
#include<iostream>
#include<string>
using namespace std;
typedef struct
{
long a[120],len;
}bign;
const bign _0={{0},1},_1={{1},1};
bign f[607];long fn;
void add(bign &a,bign &b,bign &c)
{
memset(c.a,0,sizeof(c.a));
c.len=(a.len>b.len?a.len:b.len);
for(long i=0;i<c.len;i++)
{
c.a[i]+=a.a[i]+b.a[i];
if(c.a[i]>=10)
{
c.a[i+1]++;
c.a[i]-=10;
}
}
if(c.a[c.len]) c.len++;
}
int cmp(bign &a,bign &b)
{
if(a.len>b.len)
return 1;
if(a.len<b.len)
return -1;
for(long i=a.len-1;i>=0;i--)
if(a.a[i]>b.a[i])
return 1;
else if(a.a[i]<b.a[i])
return -1;
return 0;
}
void init()
{
bign c;
fn=1;
f[0]=f[1]=_1;
for(long i=2;f[i-1].len<=101;i++)
{
add(f[i-1],f[i-2],f[i]);
fn++;
}
}
int main()
{
init();
string s1,s2;
while(cin>>s1>>s2)
{
if(s1=="0"&&s2=="0") break;
long ans;
bign a,b;
a.len=s1.length(),b.len=s2.length();
memset(a.a,0,sizeof(a.a));
memset(b.a,0,sizeof(b.a));
for(long i=0;i<a.len;i++) a.a[i]=s1[a.len-i-1]-'0';
for(long i=0;i<b.len;i++) b.a[i]=s2[b.len-i-1]-'0';
ans=0;
for(long i=1;i<=fn;i++)
{
if(cmp(b,f[i])<0)
break;
if(cmp(a,f[i])<=0)
ans++;
}
printf("%ld\n",ans);
}
return 0;
}
posted on 2010-02-22 17:21
lee1r 阅读(634)
评论(0) 编辑 收藏 引用 所属分类:
题目分类:数学/数论