首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于C语言实现两个大数相乘解决方案

2012-03-09 
关于C语言实现两个大数相乘昨天天参加华为技术面试,最后一道题是实现两个30位大数相乘,想了半个小时没想出

关于C语言实现两个大数相乘
昨天天参加华为技术面试,最后一道题是实现两个30位大数相乘,想了半个小时没想出来,虽然过了,但是感觉很丢脸。哪位大虾知道C语言中一般不定长大数相乘应该以什么思路去解决?提供个思路就行谢谢各位!

[解决办法]
同意上面肯定用字符串来表示
我的想法是拆开来
比如23*45
就分别算2*4,2*5,3*4,3*5
最后根据所在的位数(个,十,百,千......)
在输出的是分别对待(在什么位置,先后顺序).
[解决办法]
对于大数,只是因为没有基本的数据类型去存储,所以可以用数组去存储大数,例如一个字节存储一个数字。

如果用笔计算两个数字相乘,是怎样做的呢。

125
x 11
-------
125
125
--------
1375

对数组进行类似操作就可以了。
[解决办法]
这样吧
struct number
{
unsigned short value;
unsigned short n;//n是阶
};
你搞3个这样的数组a[30] b[30], result[60]

[解决办法]

C/C++ code
# include<stdio.h># include<string.h># include<malloc.h>void multiply(char* a,char* b,char* c){    int i,j,ca,cb,* s;    ca=strlen(a);    cb=strlen(b);    s=(int*)malloc(sizeof(int)*(ca+cb));    for (i=0;i<ca+cb;i++)        s[i]=0;    for (i=0;i<ca;i++)        for (j=0;j<cb;j++)            s[i+j+1]+=(a[i]-'0')*(b[j]-'0');    for (i=ca+cb-1;i>=0;i--)        if (s[i]>=10)        {            s[i-1]+=s[i]/10;            s[i]%=10;        }    i=0;    while (s[i]==0)        i++;       for (j=0;i<ca+cb;i++,j++)           c[j]=s[i]+'0';    c[j]='\0';    free(s);} 

热点排行
Bad Request.