| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 780 人关注过本帖
标题:[原创]利用卷积计算两个数的乘积
取消只看楼主 加入收藏
BugEyes
Rank: 1
等 级:新手上路
帖 子:37
专家分:0
注 册:2006-1-10
收藏
 问题点数:0 回复次数:0 
[原创]利用卷积计算两个数的乘积
原始url:http://bugeyes.blog.edu.cn/user1/20989/archives/2005/352127.shtml

设a=999,b=999,把两个数看作是由0、1、2、3、4、5、6、7、8、9组成的序列,则两个数相乘可以看作是一种卷积运算。如a*b=998001。而序列卷积结果为81、162、243、162、81,把这些数分别看作乘积结果的万位、千位、百位、十位、个位数,然后做运算(当前数和进位之和对10的余数即为当前位最终结果,对10的商为对前一位的进位),处理后得998001,即两数相乘最终结果。

代码如下,简单模拟:

#i nclude <conio.h>
#i nclude <stdlib.h>

void juanji(int x[],int y[],int z[],int n,int m)
{
int i,j;
for(i=0;i<=n+m;i++)
{
int t=0;
for(j=0;j<=n;j++)
if(i-j>=0&&i-j<=m)
t+=x[j]*y[i-j];
z[i]=t;
}
}

void output(int array[],int n)
{
int i;
for(i=0;i<=n;i++)
printf("%4d",array[i]);
printf("\n\n");
}

void chuli(int array[],int result[],int n)
{
int i,c=0;
for(i=n-1;i>=0;i--)
{
result[i+1]=(array[i]+c)%10;
c=(array[i]+c)/10;
}
result[0]=c;
}

void main()
{
int x[3]={9,9,9},y[3]={9,9,9},z[5]={0},result[6];
int i;
juanji(x,y,z,2,2);
chuli(z,result,5);
output(x,2);
output(y,2);
printf("\nThe product is:\n");
for(i=0;i<6;i++)
printf("%d",result[i]);
}

搜索更多相关主题的帖子: 卷积 乘积 
2006-01-10 12:01
快速回复:[原创]利用卷积计算两个数的乘积
数据加载中...
 
   



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

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