| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 939 人关注过本帖
标题:[求助]可不可以给个思路?
只看楼主 加入收藏
djp
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2006-12-28
收藏
得分:0 
但是给的数据特别的大,要求精度也高。。。。

用pow是不行的。。

float型出不了那么高的精度。

这是我们的作业。。。

呵呵。

2007-04-04 15:11
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 

试一下,看看可不可以.
似乎你给的几个数字input和output有些不符合,最后一个是符合的!

程序代码:
#include <iostream>
#include <string>
using namespace std;

bool IsDigit(string str)
{
for(int i=0;i<str.length();i++)
if(!isdigit(str[i])&&str[i]!='.')
return false;
return true;
}

string Multi(string a,string b)
{
if(!IsDigit(a) || !IsDigit(b))
{
cerr<<\"输入的格式不合法!\"<<endl;
return \"\";
}
int len=0; //相乘后小数点几位
int a_len=a.length();//a的长度
int a_dot=a.find('.');//a的小数点位置
if(a_dot!=-1)
{
len+=a_len-1-a_dot;
int i;
a.erase(a_dot,1);
a_len--;
}
int b_len=b.length();//b的长度
int b_dot=b.find('.');//b的小数点位置
if(b_dot!=-1)
{
len+=b_len-1-b_dot;
int i;
b.erase(b_dot,1);
b_len--;
}
int maxlen=a_len+b_len-1; //相乘后最长位数-1
int catorLen=a_len<b_len?a_len:b_len; //将较短的数作为乘数
int candLen=a_len+b_len-catorLen; //将较长的数作为被乘数

//初始化
if(a_len<b_len)
swap(a,b);
int **ans=new int*[catorLen];
for(int s=0;s<catorLen;s++)
{
ans[s]=new int[maxlen];
memset(ans[s],0,sizeof(int)*maxlen);
}
int carry=0;
//相乘后存入二维数组
for(int i=catorLen-1;i>-1;i--)
{
for(int j=candLen-1;j>-1;j--)
{
ans[i][i+j]=((a[j]-'0')*(b[i]-'0')+carry)%10;
carry=((a[j]-'0')*(b[i]-'0')+carry)/10;
}
}

int head=carry;
carry=0;
string temp;
//将二维数组相加
for(int m=maxlen-1;m>-1;m--)
{
int result=0;
for(int n=catorLen-1;n>-1;n--)
{
result+=ans[n][m];
}
char buf[3]={0};
itoa((result+carry)%10,buf,10);
temp.insert(0,buf);
carry=(result+carry)/10;
}
head+=carry;
char elem[2]={0};
itoa(head,elem,10);
if(head!=0)
temp.insert(0,elem);
temp.insert(temp.length()-len,\".\");
return temp;
}
string Pow(string R,int N)
{
if(N<0)
return \"failsed\";
else if(N==0)
return \"1\";
else return Multi(Pow(R,N-1),R);
}


int main(int argc, char *argv[])
{
string str=Pow(\"3\",10);
if(str==\"\")
cerr<<\"failed\"<<endl;
else cout<<str<<endl;
return 0;
}

[此贴子已经被作者于2007-4-4 19:18:03编辑过]


[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2007-04-04 19:17
快速回复:[求助]可不可以给个思路?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.037790 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved