您的位置:首页 > 编程语言 > C语言/C++

OpenJudge百炼-2739-计算对数-C语言-高精度

2017-09-02 17:22 381 查看
描述:

给定两个正整数a(a>1)和b。可以知道一定存在整数x,使得x <= logab < x + 1 或者 ax<= b < ax+1,请计算x。

输入:

两行,第一行是a,第二行是b。每个整数均不超过100位。

输出:

一行,即对应的x。输入数据保证x不大于20。

样例输入:

10000

1000000000001

样例输出:

3


/***************************************************
**文件名:百炼-2739
**Copyright (c) 2015-2025 OrdinaryCrazy
**创建人:OrdinaryCrazy
**日期:20170902
**描述:百炼2739参考答案
**版本:1.0
****************************************************/
#include <stdio.h>
#include <string.h>
int numa[150],numb[150],numc[150],lena,lenb;
int compare(int*num1,int*num2)
{
int i;
for(i = 149;i >= 0;i--)
if(num1[i] - num2[i])
return num1[i] - num2[i];
return 0;
}
void multiply(int*num1,int*num2)
{
int i,j,tmp[310];
memset(tmp,0,sizeof(tmp));
for(i = 0;i < lena;i++)
for(j = 0;j < 150;j++)
tmp[i+j] += num1[i] * num2[j];
for(i = 0;i < 150;i++)
{
tmp[i+1] += tmp[i]/10;
tmp[i] %= 10;
}
memcpy(num2,tmp,150*sizeof(int));
}
int main()
{
char a[151],b[151];
int i,j;
scanf("%s%s",a,b);
lena = strlen(a);
lenb = strlen(b);
for(i = lena-1,j = 0;i >= 0;i--,j++)
numa[j] = a[i] - '0';
for(i = lenb-1,j = 0;i >= 0;i--,j++)
numb[j] = b[i] - '0';
numc[0] = 1;
for(i = 0;;i++)
{
if(compare(numc,numb) > 0)
break;
multiply(numa,numc);
}
printf("%d\n",i - 1);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: