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

来源:互联网 发布:淘宝达人帖子写手 编辑:程序博客网 时间:2024/05/22 12:53

描述:
给定两个正整数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;}

阅读全文
0 0
原创粉丝点击