我来我网
https://5come5.cn
 
您尚未 登录  注册 | 菠菜 | 软件站 | 音乐站 | 邮箱1 | 邮箱2 | 风格选择 | 更多 » 
 

本页主题: 菜鸟求助:一peking acm上的小题目,望达人帮忙 显示签名 | 打印 | 加为IE收藏 | 收藏主题 | 上一主题 | 下一主题

lovebaby



性别: 保密 状态: 该用户目前不在线
等级: 品行端正
发贴: 177
威望: 0
浮云: 1199
在线等级:
注册时间: 2006-02-18
最后登陆: 2008-03-26

5come5帮你背单词 [ tumble /'tΛmbl/ vi. 摔倒,跌倒,滚落,翻筋斗;vt. 使摔倒,弄乱;n. 翻滚,混乱 ]


菜鸟求助:一peking acm上的小题目,望达人帮忙

Description
Problems involving the computation of exact values of very large magnitude and precision are common. For example, the computation of the national debt is a taxing experience for many computer systems.

This problem requires that you write a program to compute the exact value of Rn where R is a real number ( 0.0 < R < 99.999 ) and n is an integer such that 0 < n <= 25.

Input
The input will consist of a set of pairs of values for R and n. The R value will occupy columns 1 through 6, and the n value will be in columns 8 and 9.

Output
The output will consist of one line for each line of input giving the exact value of R^n. Leading zeros should be suppressed in the output. Insignificant trailing zeros must not be printed. Don't print the decimal point if the result is an integer.

Sample Input

95.123 12
0.4321 20
5.1234 15
6.7592 9
98.999 10
1.0100 12

Sample Output

548815620517731830194541.899025343415715973535967221869852721
.00000005148554641076956121994511276767154838481760200726351203835429763013462401
43992025569.928573701266488041146654993318703707511666295476720493953024
29448126.764121021618164430206909037173276672
90429072743629540498.107596019456651774561044010001
1.126825030131969720661201

Hint
If you don't know how to determine wheather encounted the end of input:
s is a string and n is an integer


#include <iostream.h>
main()
{
  double r,t;
  int n;

  cin>>r>>n;
  t=1;
  while(n>0)
  {t=t*r;
  n--;
  }
cout.precision(1000);
  cout<<t<<"\n";
  return 0;
兰色的是我写的,有点数据显示问题,望达人帮忙啊


[ 此贴被lovebaby在2007-03-24 18:39重新编辑 ]
顶端 Posted: 2007-03-24 17:46 | [楼 主]
kangtalc



性别: 帅哥 状态: 该用户目前不在线
头衔: 揍敌客·奇犽
等级: 希望之光
家族: 万人坑恋影部落
发贴: 1723
威望: 5
浮云: 1113
在线等级:
注册时间: 2005-09-21
最后登陆: 2008-06-29

5come5帮你背单词 [ endorse /in'do:s/ vt. 背书;答署(姓名),赞同;批准 ]


你写的明显不行嘛,一点算法都没有。。。。就靠机器给的数据类型是不能作高精度计算的

这道题我做过,一次就AC过,其实是很简单的,就是一个大整数乘法高精度问题
算法思想就是按照平时我们平时算乘法的时候手算的步骤算
自己模拟乘法
思想就是这样的,楼主切些程序吧
顶端 Posted: 2007-03-24 22:48 | [1 楼]
kangtalc



性别: 帅哥 状态: 该用户目前不在线
头衔: 揍敌客·奇犽
等级: 希望之光
家族: 万人坑恋影部落
发贴: 1723
威望: 5
浮云: 1113
在线等级:
注册时间: 2005-09-21
最后登陆: 2008-06-29

5come5帮你背单词 [ pat /pæt/ n. & v. 轻拍,轻打,抚摸 ]


一会儿帮你写个
顶端 Posted: 2007-03-25 17:04 | [2 楼]
kangtalc



性别: 帅哥 状态: 该用户目前不在线
头衔: 揍敌客·奇犽
等级: 希望之光
家族: 万人坑恋影部落
发贴: 1723
威望: 5
浮云: 1113
在线等级:
注册时间: 2005-09-21
最后登陆: 2008-06-29

5come5帮你背单词 [ hesitate /'heziteit/ vi. 犹豫,踌躇 ]


我也写了个
Copy code
#include <iostream>
using namespace std;

const int MAX = 1000;

int length(int num)
{
  int k = 0;
  while(num/10 != 0)
  {
    k++;
    num /= 10;
  }
  return k+1;
 
}


void Multiply(int result[], int& resultlen, int digit[], int k)
{
  int i;
  int j;
  int len;
  int re[MAX];
  for (i = 0; i < MAX; i++)
    re[i] = 0;
 
  for (i = 0; i < k; i++)
    for (j = 0; j < resultlen; j++)
    {
        re[i+j] += result[j] * digit[i];
        re[i+j+1] += re[i+j] / 10;
        re[i+j] %= 10;
    }
  len = resultlen + k;
  if (re[len-1] == 0)
    len--;
  resultlen = len;
  for (i = 0; i < len; i++)
    result[i] = re[i];
}

int main()
{
  double r;
  int n;
  int dot;
  int i;
  int j;
  int k;
  int m;
  int digit[MAX];
  int result[MAX];
  int resultlen;
  bool flag = true;
 
  while (cin >> r >> n)
  {
    i = length((int)r);
    if (i == 1)
    {
        dot = 4;
        r = r * 10000;
    }
    else
    {
        dot = 3;
        r = r * 1000;
    }
    long int number = (long int)r;
   
    dot = dot * n;
    if (number == 0)
    {
          cout << "0" <<endl;
          continue;
    }
   
    for (i = 0; i < MAX; i++)
    {
        digit[i] = 0;
        result[i] = 0;
    }
   
    k = length(number);
   
    resultlen = k;
   
   
    for (i = 0; i < k; i++)
    {
        digit[i] = result[i] = number % 10;
        number /= 10;  
    }
 
    for (i = 0; i < n-1; i++)
        Multiply(result, resultlen, digit, k);
       
   
    i = 0;
    while (i < dot)
    {
        if (result[i] != 0)
          break;
        i++;
    }
       
    if (i == dot)
        flag = false;
    else
    {
        flag = true;
        m = i;
    }
   
   
    if (resultlen > dot)
    {
        for (i = resultlen - 1; i >= dot; i--)
          cout << result[i];
        if (flag)
        {
          cout << "." ;
          for (i = dot - 1; i >= m; i--)
            cout << result[i];
        }    
    }  
    else
    {
        if (flag)
        {
          cout << "." ;
          for (i = dot - 1; i >= m; i--)
            cout << result[i];
        }
         
    }
        cout << endl;    
  }
  return 0;
}


Screenshot.gif


[ 此贴被kangtalc在2007-03-25 21:16重新编辑 ]
顶端 Posted: 2007-03-25 20:59 | [3 楼]
我来我网·5come5 Forum » 程序员之家

Total 0.011989(s) query 6, Time now is:11-23 19:00, Gzip enabled
Powered by PHPWind v5.3, Localized by 5come5 Tech Team, 黔ICP备16009856号