永发信息网

在c语言环境下实现长整数加减运算

答案:1  悬赏:0  手机版
解决时间 2021-04-11 13:11
输入两个长整数(100位),实现加减运算,而且具有可扩充性
谁能回答,请帮帮忙 先谢谢了啊!
最佳答案
下面的代码能够完成楼主的要求,仅做参考。

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

#define MAX_SIZE 100 // 大整数的最大位数

char n1[MAX_SIZE] = ""; // 第一个大整数
char n2[MAX_SIZE] = ""; // 第二个大整数
char n3[MAX_SIZE+1] = ""; // 两个大整数之和或差

void do_add();
void do_sub();

void main()
{
// 读入两个大整数
printf("n1=");
scanf("%s", n1);
printf("n2=");
scanf("%s", n2);

// 求和
do_add();

// 求差
do_sub();
}

void do_add()
{
int iLen1;
int iLen2;
int iCarry = 0; // 进位
int n = 0;

// 将两个大整数的各位依次求和
for(iLen1 = strlen(n1)-1, iLen2 = strlen(n2)-1; (iLen1 >= 0) && (iLen2 >= 0); iLen1--, iLen2--)
{
n3[n] = n1[iLen1] - '0' + n2[iLen2] - '0' + iCarry;
iCarry = n3[n] / 10;
n3[n] %= 10;
n++;
}
for(; iLen1 >= 0; iLen1--)
{
n3[n] = n1[iLen1] - '0' + iCarry;
iCarry = n3[n] / 10;
n3[n] %= 10;
n++;
}
for(; iLen2 >= 0; iLen2--)
{
n3[n] = n2[iLen2] - '0' + iCarry;
iCarry = n3[n] / 10;
n3[n] %= 10;
n++;
}

// 输出大整数之和
printf("n1+n2=");
for(n--; n >= 0; n--)
{
printf("%d", n3[n]);
}
printf("\n");
}

void do_sub()
{
int iLen1;
int iLen2;
int iBorrow = 0; // 借位
int n = 0;
int sign = 0;

// 如果n2>n1,那么交换两者,并置符号位为负
iLen1 = strlen(n1);
iLen2 = strlen(n2);
if ((iLen2 > iLen1) || (iLen2 == iLen1) && (strcmp(n2, n1) > 0))
{
strcpy(n3, n1);
strcpy(n1, n2);
strcpy(n2, n3);
sign = -1;
}
// 将两个大整数的各位依次求差
for(iLen1 = strlen(n1)-1, iLen2 = strlen(n2)-1; (iLen1 >= 0) && (iLen2 >= 0); iLen1--, iLen2--)
{
n3[n] = n1[iLen1] - n2[iLen2] - iBorrow;
iBorrow = (n3[n] >= 0) ? 0 : 1;
if (n3[n] < 0)
{
n3[n] += 10;
}
n++;
}
for(; iLen1 >= 0; iLen1--)
{
n3[n] = n1[iLen1] - '0' - iBorrow;
iBorrow = (n3[n] >= 0) ? 0 : 1;
if (n3[n] < 0)
{
n3[n] += 10;
}
n++;
}

// 输出大整数之差
printf("n1-n2=");
if (sign == -1)
{
printf("-");
}
for(n--; n >= 0; n--)
{
printf("%d", n3[n]);
}
printf("\n");
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
龙卷风手机下载系统下载电影的时候怎么显示试
鞍山市旧堡区房价是多少
广东3区出售12智12精284防终极属性风衣卖RMB1
苹果6主板电容c0633在什么位置
谁会熟练的使用暗组2010
学习让我必须放弃很多东西用英语怎么翻译
①我是一个没有出息的人。我的感情太多,总是
苏州酸菜鱼哪家好吃,苏州哪里有好吃的酸菜鱼
新开南路在哪里啊,我有事要去这个地方
为什么e宠不能买猫粮了?
电脑连接WiFi速度很快,但是直接插网线速度却
CF用改名卡改名字可以用符号吗?
QQ会员彩铃问题
欧罗巴KTV这个地址在什么地方,我要处理点事
电影《替身杀手》的开场音乐叫什么名字?
推荐资讯
截止到5月27日某民营企业共向某灾区捐款13099
我想知道张家界现在是否有下雪?气温几度左右?
怎样修改DHCP指定的IP
qq网络电视怎么自动播放?
笔记本显卡gtx870M请教怎么优化
惠普DV4-1212tx报价
六福珠宝(沧州信誉楼商厦)地址有知道的么?有
影响汽车跑偏的各种原因有什么?
爱情永远都是欺骗、没有真实的一面、
燕窝有几种吃法呢??
佛山大沥有多少个汽车站
网吧如果被查到有未成年人会怎么罚?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?