计算大整数的差(高精差)

计算大整数的差

电子科技大学转专业MOOC码图题目。
这是我在准备转专业时在码图系统里面写过最难的题之一,还有一道是约瑟夫生死游戏。
题目:
通过课程进入 题 号: 135 计算大整数的差(C++) 语言要求: C++
编写程序接受两个任意大的整数,返回两个整数之差,
(提示:大整数用字符串表示)。
输出格式:如果结果为正,在结果前用"+“表示,如果为负数则加上”-";
如果结果的位数小于输入整数的位数,则在结果前面补零直到和位数最大的输入数位数一致;
如果两个数相等直接输出0

例如

输入:
22345678900 12345678900
输出:
+10000000000

输入:
100 1010
输出:
-0910

输入: 12345 12345
输出: 0

计算大整数的差,数的范围已经超出了long long,所以要使用高精算法,初学者可能比较陌生,可以先到洛谷或者B站上学一下高精的知识,相比来说,高精加比高精乘要简单一些。

洛谷: https://www.luogu.com.cn/training/106#problems

B站高精算法推荐视频:
https://www.bilibili.com/video/BV1LA411v7mt?spm_id_from=333.999.0.0

#include<iostream>
#include<cstring>
#include <string>
using namespace std;
//先练习下比较字符串大小strcmp: string compare 
int main()
{
	char a[255],b[255];
	char c[255],d[255];
	int len1,len2,i,j,len3,len4;
	scanf("%s",a);
	scanf("%s",b);
	len1=strlen(a);len2=strlen(b);
	if(len1==len2){
		if(strcmp(a,b)==0){//xiang deng
			cout<<"0";
			return 0;
		}
		if(strcmp(a,b)<0){
			cout<<"-";
			strcpy(c,b);
			strcpy(d,a);
		}
		if(strcmp(a,b)>0){
			cout<<"+";
			strcpy(c,a);
			strcpy(d,b);
		}
	}
	if(len1>len2){
		cout<<"+";
		strcpy(c,a);
		strcpy(d,b);
	}
	if(len1<len2){
		cout<<"-";
		strcpy(c,b);
		strcpy(d,a);	
	}
	
	
	len3=strlen(c);
	len4=strlen(d);
	char *ans=new char [len3];//动态内存分配 
	
	for(i=len3-1,j=len4-1;j>=0;i--,j--){//逆序
		if(c[i]-d[j]<0){
			c[i]=c[i]+10;
			c[i-1]=c[i-1]-1;
		}
		
		ans[i]=c[i]-d[j]+'0';
	}
	for(i=0;i<len1-len2;i++){
		ans[i]=c[i];
	}
//	for(j=0;j<len3;j++){
//		cout<<ans[j];
//	}
	puts(ans);
	
	delete [] ans; 
	return 0;
} 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值