找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2948|回复: 0
打印 上一主题 下一主题
收起左侧

实现两个大数(64位)相乘函数简单实现

[复制链接]
跳转到指定楼层
楼主
ID:51090 发表于 2014-9-24 22:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 xiaojuan 于 2014-9-24 22:38 编辑

                        
////////////////////////////////////////////////////////
//功能:实现两个64位以下数的相乘
//作者:豆腐干
//时间:2014年9月22日 14:10:47
//如果想运算更大的数据只需要更改数组大小便可
////////////////////////////////////////////////////////
#include<stdio.h>
#include<string.h>

int main(void)
{
char buf1[64] ="12345678912345678912345678912345678912345678912345678912345678";
char buf2[64] ="98765432198765432198765432198765432198765432198765432198765432";
char dest[64 * 64 * 4]; //存放过程数值
char result[128 * 2] = {0}; //存放结果

char *temp1 = buf1;
char *temp2 = buf2;
char *temp3 = dest;
char *temp4 = dest;
char *temp5 = result;
int len1, len2, temp, flag = 0, num;

len1 = strlen(buf1);
len2 = strlen(buf2);

printf("%s\n%s\n", buf1, buf2);
int i, j;
for(i = 1; i < len2 + 1; i++)
{
for(j = 1; j < i; j++)
{
*temp3 = '0';
temp3++;
}

for(j = 1; j < len1 + 1; j++)
{
temp = (*(temp1 + len1 - j) - '0') * (*(temp2 + len2 - i) -'0');
num = temp % 10 + flag;
flag = temp / 10;
if(num / 10)
{
flag += num / 10;
num = num % 10;
}
*temp3 = num + '0';
temp3++;
}

if(flag)
{
*temp3 = flag + '0';
temp3++;
flag = 0;
}
else
{
*temp3 = '0';
temp3++;
}

for(j = 1; j < len2 - i + 1; j++)
{
*temp3 = '0';
temp3++;
}
}
*temp3 = '\0';
printf("%s\n", dest);


for(i = 0; i < len1 + len2; i++)
{
temp = 0;
for(j = 0; j < len2; j++)
{
temp3 = temp4;
temp += (*(temp3 + (len1 + len2) * j) - '0');
}
temp += flag;
flag = 0;

if(temp / 10)
{
flag = temp / 10;
temp = temp % 10;
}
temp4++;
*temp5 = temp + '0';
temp5++;
*temp5 = '\0';
}

for(i = 0; i <= len1 + len2; i++)
{
printf("%c", *(temp5--));

}

putchar('\n');
return 0;
}
//运行环境:Linux
//注:1.输入问题 我用scanf函数试了下有问题
//  2.输出如果最高位是0,没做处理


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表