找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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


////////////////////////////////////////////////////
//实现两个小于64位数字的加法运算
//作者:豆腐干
//时间:2014年9月23日 15:25:47
////////////////////////////////////////////////////

#include<stdio.h>
#include<string.h>

//字符串翻转函数
char *strinv(char *def)
{
int len, i;
char *temp1 = def;
char *temp2 = def;
char ch;

while(*temp2 != '\0')
temp2++;
temp2--;
len = strlen(def);

for(i = 0; i < len / 2; i++)
{
ch = *(temp1 + i);
*(temp1 + i) = *(temp2 - i);
*(temp2 - i) = ch;
}
return def;
}

int main(void)
{
char buf1[64] ="123456789123456789123456789123456789123456789123456789123456789";
char buf2[64] ="987654321987654321987654321987654321987654321987654321";
char dest[64 + 1];

printf("add1 = %s\nadd2 = %s\n", buf1, buf2);
char *temp1 = strinv(buf1);
char *temp2 = strinv(buf2);
char *temp3 = dest;

int i, num, len, len1, len2, flag = 0;
len1 = strlen(buf1);
len2 = strlen(buf2);
if(len1 > len2)
{
while(*temp2 != '\0')
temp2++;
for(i = 0; i < len1 - len2; i++)
{
*(temp2 + i) = '0';
}
temp2 = buf2;
len = len1;
}
else if(len1 < len2)
{
while(*temp1 != '\0')
temp1++;
for(i = 0; i < len2 - len1; i++)
{
*(temp1 + i) = '0';
}
temp1 = buf1;
len = len2;
}

for(i = 0; i < len; i++)
{
num = *(temp1 + i) + *(temp2 + i) + flag - 2 * '0';
flag = num / 10;
*temp3++ = num % 10 + '0';
}
if(flag > 0)
{
*temp3 = flag + '0';
temp3++;
flag = 0;
}
*temp3 = '\0';

printf("add1 + add2 = %s\n", strinv(dest));

return 0;
}



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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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