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

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

lovebaby



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

5come5帮你背单词 [ inhabitant /in'hæbitənt/ 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帮你背单词 [ countryside /'kΛntrisaid/ n. 农村(的) ]


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

这道题我做过,一次就AC过,其实是很简单的,就是一个大整数乘法高精度问题
算法思想就是按照平时我们平时算乘法的时候手算的步骤算
自己模拟乘法
思想就是这样的,楼主切些程序吧

天上太陽  地上綠樹
我們的身體在大地誕生
我們的靈魂來自於天上
陽光及月光照耀我們的四肢

綠地滋潤我們的身體
將此身交給吹過大地的風
感謝上天賜與奇蹟與窟廬塔土地
願我們的心靈能永保安康

我願能與所有同胞分享喜樂
願能與他們分擔悲傷
請你永遠讚美窟廬塔族的人民
讓我們以紅色的火紅眼為證

顶端 Posted: 2007-03-24 22:48 | [1 楼]
kangtalc



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

5come5帮你背单词 [ kettle /'ketl/ n. 水壶 ]


一会儿帮你写个

天上太陽  地上綠樹
我們的身體在大地誕生
我們的靈魂來自於天上
陽光及月光照耀我們的四肢

綠地滋潤我們的身體
將此身交給吹過大地的風
感謝上天賜與奇蹟與窟廬塔土地
願我們的心靈能永保安康

我願能與所有同胞分享喜樂
願能與他們分擔悲傷
請你永遠讚美窟廬塔族的人民
讓我們以紅色的火紅眼為證

顶端 Posted: 2007-03-25 17:04 | [2 楼]
richardxx





性别: 保密 状态: 该用户目前不在线
等级: 品行端正
发贴: 193
威望: 0
浮云: 1144
在线等级:
注册时间: 2005-10-01
最后登陆: 2009-02-28

5come5帮你背单词 [ sardine /sa:'di:n/ a. 讽刺的,讥讽的 ]


送给你了。。。


Copy code

// Solution by OUSAA
#include <stdio.h>
#include <string.h>

void add(int* a1,int* a2,int* result)
{
int i;
int temp;

for (i=0,temp=0;i<51;++i) {
  result[i]=temp;
  temp=a1[i]+a2[i];
  result[i]+=temp%10;
  temp/=10;
}
result[n]=temp;
}

void multiply(int* m1,int* m2,int* result)
{
int i,j;
int up;
int mid[103],step[103];

for (i=0;i<51;++i) {
  int temp=m2[i];
  if (temp==0) continue;
  memset(mid,0,sizeof(mid));
  for (j=0,up=0;j<51;++j) {
    mid[j+i]=up+m1[j]*temp;
    up=mid[j+i]/10;
    mid[j+i]%=10;
  }
  mid[n1+i]=up;
  add(mid,result,step,n1+i);
  memcpy(result,step,51*sizeof(int));
}
}

void exponential(int* m1,int ex,int* result)
{
int i;

for (i=0;i<ex;++i) {
  multiply(m1,m1,result);
  memcpy(m1,result,51*sizeof(int));
}
}

int main()
{
char num[7];
int d[51];
int res[51];
int ex;
int i,k,dot,pos;
int forward;

while(scanf("%s %d",num,&ex)) {
  memset(d,0,sizeof(d));
  memset(res,0,sizeof(res));
  for (i=0,dot=5,pos=4;i<6;++i) {
    if (num[i]=='.') {
   dot=i;
   continue;
    }
    d[pos--]=num[i]-'0';
  }
  forward=(5-dot)*ex;
  exponential(d,ex,res);
  k=50;
  while (res[k]==0) --i;
  for (i=k;i>=forward;--i) putchar(res[i]+'0');
  if (forward!=0) {
    putchar('.');
    for (i=forward-1;i>=0;--i) putchar(res[i]+'0');
  }
  putchar('\n');
}

return 0;
}

顶端 Posted: 2007-03-25 18:38 | [3 楼]
kangtalc



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

5come5帮你背单词 [ explode /iks'pləud/ v. (使)爆炸,(使)爆发 ]


我也写了个
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 | [4 楼]
lovebaby



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

5come5帮你背单词 [ dual /'dju:əl/ a. 双的,二重的,二元的 ]


kangtalc太感谢楼主了
看来小第还有很多很多要学习的饿哈
顶端 Posted: 2007-03-27 18:46 | [5 楼]
hhbhhb



性别: 帅哥 状态: 该用户目前不在线
等级: 品行端正
发贴: 292
威望: 0
浮云: 1105
在线等级:
注册时间: 2006-09-21
最后登陆: 2009-03-16

5come5帮你背单词 [ recess /ri'ses/ n. 休息,休假,壁橱,(pl.)幽深处 ]


这题就是单纯的高精度啦。。
既然大牛们都贴了那我就不班gate弄斧了……
顶端 Posted: 2007-03-31 08:39 | [6 楼]
我来我网·5come5 Forum » 程序员之家

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