加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

高精度练习之减法

发布时间:2020-12-14 02:44:19 所属栏目:大数据 来源:网络整理
导读:题目描述? Description 给出两个正整数A和B,计算A-B的值。保证A和B的位数不超过500位。 输入描述? Input Description 读入两个用空格隔开的正整数 输出描述? Output Description 输出A-B的值 样例输入? Sample Input 3 12 样例输出? Sample Output -9 数据
题目描述?Description

给出两个正整数A和B,计算A-B的值。保证A和B的位数不超过500位。

输入描述?Input Description

读入两个用空格隔开的正整数

输出描述?Output Description

输出A-B的值

样例输入?Sample Input

3 12

样例输出?Sample Output

-9

数据范围及提示?Data Size & Hint

两个正整数的位数不超过500位

这里在大数传入的时候我选择的是字符串接收,然后再将字符数组转化成整数数组,

并保证a数组大于b数组

#include<stdio.h>
#include<string.h>
int main(){
	char  c[505],d[505];
	int sum[505],a[505],b[505];
	memset(sum,sizeof(sum));
	/*gets_s(c);
	gets_s(d);*/
	scanf("%s%s",c,d);
	int i,j,k,tmp,t,flag = 0;
	if (strlen(c) > strlen(d) || strlen(c) == strlen(d) && strcmp(c,d) >= 0){
		for (i = strlen(c) - 1,j = 0; i >= 0; i--,j++)
			a[j] = c[i] - '0';
		for (i = strlen(d) - 1,k = 0; i >= 0; i--,k++)
			b[k] = d[i] - '0';
	}
	else{
		flag = 1;
		for (i = strlen(d) - 1,j++)
			a[j] = d[i] - '0';
		for (i = strlen(c) - 1,k++)
			b[k] = c[i] - '0';
	}
	t = 0;
	for (i = 0; i < k; i++){
		tmp = a[i] - b[i] - t;
		if (tmp < 0){
			tmp += 10;
			t = 1;
		}
		else
			t = 0;
		sum[i] = tmp;
	}
	while (i < j){
		tmp = a[i] - t;
		if (tmp < 0){
			tmp += 10;
			t = 1;
		}
		else
			t = 0;
		sum[i++] = tmp;
	}

	for (i = 501; sum[i] == 0; i--);
	if (flag == 1)
		printf("-");
	while (i >= 0)
		printf("%d",sum[i--]);
	puts("");
	return 0;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读