如题内容

fx397993401 2010-01-01 07:17:34
2 16 可知 2的4次方是 16
3 27 可知 3的3次方是 27
7 4357186184021382204544 这个我求出 是 7的1234 方,;
当我们给出根 和一个值 这个值很大 最多有一百位
而需要快速得出 这个根的多少次方 可以得到这个值 这里我们假设我们给出的值是存在的
...全文
98 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
fx397993401 2010-01-02
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 ivapple 的回复:]
那个7的1234次方有些大吧。
如果结果有100位的话,也就是10的100次方,换成7的话,应该是
100*(以7为底10的对数) = 100*1.18位。
就是说7的100多次方产生的结果已经有100位了。
[/Quote]

是我的错误 呵呵
fx397993401 2010-01-02
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 qiuzhenguang 的回复:]
楼主题目理解也有点小错误:
“7  4357186184021382204544  这个我求出 是 7的1234 方”,应该是
“1234的7次方是 4357186184021382204544 ”
[/Quote]

是我的错误
qiuzhenguang 2010-01-02
  • 打赏
  • 举报
回复
楼主题目理解也有点小错误:
“7 4357186184021382204544 这个我求出 是 7的1234 方”,应该是
“1234的7次方是 4357186184021382204544 ”
qiuzhenguang 2010-01-02
  • 打赏
  • 举报
回复
貌似POJ2109题目。本来应该用大数组来表示高精度整数的,但是题目数据较弱,用double型就能通过了。
以下是我的AC源码,用GCC编译器。
#include "stdio.h"
#include "stdlib.h"
#include "math.h"
//其实这道题应该用整数数组来做的,用浮点数能做对的话,那也只是因为题目的数据太弱了。

int main()
{
/* double x=0.1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123;
printf("%0.100lf\n",x);
system("pause");*/

double p,n;
while(scanf("%lf%lf",&n,&p)!=EOF)
{
printf("%d\n",(int)(pow(p,1.0/n)+0.001));
}


return 0;
ivgwt 2010-01-01
  • 打赏
  • 举报
回复
那个7的1234次方有些大吧。
如果结果有100位的话,也就是10的100次方,换成7的话,应该是
100*(以7为底10的对数) = 100*1.18位。
就是说7的100多次方产生的结果已经有100位了。
ivgwt 2010-01-01
  • 打赏
  • 举报
回复
利用数组模拟大数相乘 和逐次平法法结合不知性能是否达到要求
////////////////////////////////////////////////
//数a乘以数b结果放在c中
//假定数字不超过80位,结果不超过160位
#define NUM(x) x - '0'
int inta[80];
int intb[80];
int intc[160+2];
void Mul(char *a, char *b)
{
int la, lb, lc;
int i, j, k;
la = strlen(a);
lb = strlen(b);
char c[160+2];
for (i=0; i<la; i++)
inta[i] = NUM(a[la-i-1]);
for (j=0; j<lb; j++)
intb[j] = NUM(b[lb-j-1]);
for (i=0; i<la; i++)
for (j=0; j<lb; j++)
intc[i+j] += inta[i]*intb[j];
k = 160+1;
while (!intc[k]&&k>0)
k--;
lc = k;
for (i=0; i<=k; i++)
{
intc[i+1] += intc[i]/10;
intc[i] %= 10;
}
if (intc[k+1] !=0 )
lc++;
for (i=0; i<=lc; i++)
c[i] = intc[lc-i] + '0';
c[i] = '\0';
}
///////////////////////////////////////
//利用反复平方法可在log(n)的时间内计算x的n次方
//假设下面temp, x用上面的数组来模拟
temp=1 ,x=1;
for(; n; n>>=1)
{
if(n&1)
x=x*temp;
temp=temp*temp;
}
alphaxiang 2010-01-01
  • 打赏
  • 举报
回复
数论里有个逐次平方法。
fx397993401 2010-01-01
  • 打赏
  • 举报
回复
但是 那个值是很大的 超出计算机字节的表示范围
FancyMouse 2010-01-01
  • 打赏
  • 举报
回复
高精度取对数?那就对大数取对数。精度可以不必高,基本上2个精度然后乘以10的幂次以后就可以拿来做浮点对数了。如果给定数字保证对数以后是整数那就完了,否则还需要返回去验证一下。

33,028

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧