标题:高精度压位乘法
只看楼主
sunyh1999
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:14
帖 子:1178
专家分:3032
注 册:2009-5-17
结帖率:79.37%
已结贴  问题点数:20 回复次数:20 
高精度压位乘法
看到网上有一道高精度问题,但是如果普通模拟只能拿60分,要压4位才能AC。但是压位我不会做,请高手指教

普通模拟:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int sum[10000]={0};
void rollback(char array[],int Len)//反转
{
char temp;
int i;
for(i=0;i<Len/2;i++)
temp=array[i],array[i]=array[Len-i-1],array[Len-i-1]=temp;
}
int amass(int a[],int b[],int a_length,int b_length)
{
int length=0,i,j,temp;
for(i=0;i<a_length;i++)
{
temp=0;
for(j=0;j<b_length;j++)
{
temp=a[i]*b[j]+temp/10+sum[i+j];
sum[i+j]=temp;
}
sum[i+j]=temp/10;
}
length=i+j;
return length;
}
int main()
{
int A[1000]={0},B[1000]={0};
int a_length,b_length,i,length=0;
char a[1000],b[1000];
gets(a),gets(b);
a_length=strlen(a);b_length=strlen(b);
rollback(a,a_length),rollback(b,b_length);
for(i=0;i<a_length;i++)
A[i]=a[i]-'0';
for(i=0;i<b_length;i++)
B[i]=b[i]-'0';
length=amass(A,B,a_length,b_length);
while(sum[length]==0&&length>0)
length--;
for(i=length;i>=0;i--)
printf("%d",sum[i]);
system("pause");
return 0;
}
搜索更多相关主题的帖子: 60分 include 
2011-02-20 10:13
刘定邦
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:687
专家分:1570
注 册:2010-9-21
得分:2 
不懂..
2011-02-20 11:08
御坂美琴
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:魔術の禁書目錄
等 级:小飞侠
威 望:9
帖 子:952
专家分:2929
注 册:2010-8-18
得分:2 
意思是叫你把10进制改成万进制

永远为正义而奋斗,锄强扶弱的Level 5 超能力者
とある魔術の禁書目錄インデックス__御み坂さか美み琴こと
http://bbs.bccn.net/space.php?action=threads&uid=483997
2011-02-20 14:52
sunyh1999
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:14
帖 子:1178
专家分:3032
注 册:2009-5-17
得分:0 
我是说压位的预处理有点难度

欢迎来到我的博客:http://blog..cn/noisunyuhong
2011-02-20 16:16
sunyh1999
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:14
帖 子:1178
专家分:3032
注 册:2009-5-17
得分:0 

欢迎来到我的博客:http://blog..cn/noisunyuhong
2011-02-20 19:42
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
得分:2 
万进制  呵呵  有意思

                                         
===========深入<----------------->浅出============
2011-02-20 20:22
犬虫门心
Rank: 8Rank: 8
来 自:西安
等 级:蝙蝠侠
帖 子:209
专家分:753
注 册:2011-1-25
得分:2 
楼主,你的意思是不是用1B表示十进制形式的两位数?
比如:
123456->0001 0010    0011 0100    0101 0110
这样,BIGVALUE a[10000]就能表示最多2万位十进制数?
(假设BIGVALUE是一种能实现上面表示形式的数据类型)

当一名对得起学生学费的老师,一直是我的目标!我会更努力的!
2011-02-20 21:41
pcbaichi
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:486
专家分:1185
注 册:2010-11-13
得分:2 
囧,不明白这是为了什么而要转进制

免费赠送河蟹一只
2011-02-20 21:53
犬虫门心
Rank: 8Rank: 8
来 自:西安
等 级:蝙蝠侠
帖 子:209
专家分:753
注 册:2011-1-25
得分:0 
以下是引用pcbaichi在2011-2-20 21:53:57的发言:

囧,不明白这是为了什么而要转进制
因为,C语言提供的表示整型的类型,最长为long,4B,最大能表示2^32-1(unsigned long),约略在42亿。这样就不能表达更大的数。而如果用double,最大也有限制:10^308,308位十进制数据。如果需要表示更大,甚至任意大的数,那C语言就受到极大地约束。
题目本身是为解决这个问题,这个问题中两个“巨大数”乘积的运算这个子问题提出的。

当一名对得起学生学费的老师,一直是我的目标!我会更努力的!
2011-02-20 22:09
pcbaichi
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:486
专家分:1185
注 册:2010-11-13
得分:0 
回复 9楼 犬虫门心
看来是好东西,你是老师吧,教C语言的?

免费赠送河蟹一只
2011-02-20 22:10



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-332466-1-1.html




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

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