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
给定两个正整数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; }
相关文章推荐
- C语言精度计算——大数相加
- OpenJudge百炼-2706-麦森数-C语言-高精度计算
- OpenJudge百炼-1183-反正切函数的应用-C语言-简单计算
- OpenJudge百炼-2809-计算2的N次方-C语言-高精度计算
- C语言精度计算——大数相乘
- 百练2739:计算对数题解
- OpenJudge百炼-2981-大整数加法-C语言-高精度计算
- 成长轨迹54 【ACM算法之路 百炼poj.grids.cn】【简单枚举】【2739:计算对数】
- OpenJudge百炼-2737-大整数除法-C语言-高精度计算
- 百练 2739 计算对数
- OpenJudge百炼-2951&PKU-1001-浮点数高精度幂-C语言-高精度计算
- OpenJudge百炼-2952-循环数 & poj-1047-Round and Round We Go-C语言-高精度计算
- OpenJudge百炼-2967-特殊日历计算-C语言-日期处理
- OpenJudge 2739 计算对数
- 百练oj2739:计算对数
- OpenJudge百炼-2764-数根-C语言-高精度计算
- 2739计算对数--基本数据类型的长度
- 【c语言】有符号数据类型与无符号数据类型的计算
- OpenJudge百炼-2819-W的密码-C语言-字符串处理
- 设置计算结果的精度