计算大整数的差
电子科技大学转专业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;
}