问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

大整数减法 C语言

发布网友 发布时间:2022-05-30 19:00

我来回答

1个回答

热心网友 时间:2023-11-01 10:40

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

char a[1000],b[1000];
int c[1001];
int x,y,i,j,k;
int blen=0;
int alen=0;
char flag = '+';//用于减法标记负数
int Subtract(char *a, char *b, int len) { //为了避免代码重复,将共同的计算抽出写成函数
int i;
for (i=len-1; i>=0; i--) {
if (a[i] < b[i]) {
c[i] = a[i] + 10 - b[i];
b[i-1]++;
} else {
c[i] = a[i] - b[i];
}
}
return 0;
}

int Subtraction(){
for (i=0;i<100;i++)
{
scanf("%c",&b[i]);
if(b[i]=='\n')
break;
blen++;
}
printf("=");
if(alen>blen)
{
x=(alen-blen);
for(i=blen-1;i>=0;i--)
{
alen--;
b[alen]=b[i];
}
for (i=0;i<x;i++)
b[i]='0';
alen=blen+x;
blen=alen;
} else if (blen > alen) {
x=(blen-alen);
for(i=alen-1;i>=0;i--)
{
blen--;
a[blen]=a[i];
}
for (i=0;i<x;i++)
a[i]='0';
blen=alen+x;
alen=blen;
}
for (i=alen-1;i>=0;i--) {
a[i]=a[i]-'0';
b[i]=b[i]-'0';
}
if (strcmp(a, b) > 0) {
Subtract(a, b, alen);
}else {
flag = '-';
Subtract(b, a, alen);
}
return 0;
}

int Addition(){
for (i=0;i<100;i++)
{ scanf("%c",&b[i]);
if(b[i]=='\n')
break;
blen++;
}
printf("=");
if(alen>blen)
{
x=(alen-blen);
for(i=blen-1;i>=0;i--)
{
alen--;
b[alen]=b[i];
}
for (i=0;i<x;i++)
b[i]='0';
alen=blen+x;
} else if (blen > alen) {
x=(blen-alen);
for(i=alen-1;i>=0;i--)
{
blen--;
a[blen]=a[i];
}
for (i=0;i<x;i++)
a[i]='0';
blen=alen+x;
alen=blen;
}

for (i=alen-1;i>=0;i--) {
a[i]=a[i]-'0';
b[i]=b[i]-'0';
if(c[i+1]+a[i]+b[i]>=10)
{
c[i]=(c[i+1]+a[i]+b[i])/10;
c[i+1] = (c[i+1]+a[i]+b[i])%10;

}
else
{
c[i+1]+=(a[i]+b[i]);
}
}

return 0;

}

int main()
{
for (i=0;i<100;i++)
a[i]=0;
for (i=0;i<100;i++)
b[i]=0;
for (i=0;i<101;i++)
c[i]=0;

for (i=0;i<100;i++)
{
scanf("%c",&a[i]);
if(a[i]=='+')
{
Addition();
goto output1;
}
if(a[i]=='-')
{
Subtraction();
goto output2;
}
alen++;
}
output1:
{
for (i=0;i<=alen;i++)
printf("%d",c[i]);
return 0;
}
output2:
{
printf("%c", flag);
for (i=0;i<alen;i++)
printf("%d",c[i]);
return 0;
}
}

代码运行结果:
123456789-12345
=+123444444

Terminated with return code 0
Press any key to continue ...

123456+111111
=0234567

Terminated with return code 0
Press any key to continue ...

1000000-1
=+0999999

Terminated with return code 0
Press any key to continue ...

1-1000000
=-0999999

Terminated with return code 0
Press any key to continue ...

//对你的代码作了! 希望有助于你的学习。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
形容手表很舒服的句子 情侣手表的对话句子 租门面和房东鉴了十年合同,房东要退店面,我可以不退吗,继续经 ...一篇朝花夕拾里十篇小短文的主要内容及作者的情感和主要人物的... 什么叫狼狗 狼狗的生活习性有哪些? 起个姓罗好听的宝宝名字 野火的近义词 个是词语解释 请旌词语解释 大整数减法 数字校园的服务商有哪些,谁家的功能好一些? c语言 大整数减法 怎样用C语言做超大整数的减法运算? 解释一下这个大数的加减法具体算法 26岁读研值得么,我刚考上211,985,可身边邻居,以前的同学都说我虚度人生,我动摇了给点建议! 《马说》每一自然段然用一句话概括。 几篇文言文的中心思想和主要内容 (马说)概括全文主旨的句子是: 刀客家族的女人杨烁唱的那首黄河水怎么下载 马说一课文章三个段分别写了什么内容?有怎样的情感脉络? 《马说》概括段意 oppo手机怎么下载两个? 北京千足金黄金价格?(首饰) 我前两天在北京菜百买了一块30克的千足金的兔年纪念金条,现在想卖,可我383元&#47;克买的,怎么卖才不亏啊 春节期间北京哪个商场千足金有优惠 北京足金和千足金的卖的价格 现在黄金的价位,北京那里最便宜,是千足金 北京现在千足金多少钱一克? 北京今日千足金的价格? 电信数字校园适合哪些客户? 如果要开发一套数字校园软件,怎么样招募组建研发团队,有没有可能外包 宣城市,市树和市花是什么 VB实现大整数的加减法计算器 超级大的整数加减法,输入时要有正负号。希望能写一下代码。c语言 您好,请问下你们安徽宣城水东镇这边有3G信号覆盖吗 谁有opengl 4.0以后的版本吗?包含gl.h glu.h 宣城职业技术学院校园一卡通是不是就是宣城职业技术学院校园一点通 宣城市国家税务局的负责辖区 大整数加法的 宣城有那家修手机病毒 安徽省宣城市玉荷路坐几路公交车 宣城的契税收取标准是多少 哪里能下载破解的(非学生版)的flexsim,或者witness软件? 疯狂牧场 肥老鼠说唱那段音乐 埃文·威廉姆斯的人物生平 拉贝日记 插曲 有名的慢摇 超市照明用什么节能灯比较好? 啦的组词,,啊的组词