11:大整数减法
- 总时间限制:
- 1000ms
- 内存限制:
- 65536kB
- 描述
-
求两个大的正整数相减的差。
- 输入
- 共2行,第1行是被减数a,第2行是减数b(a > b)。每个大整数不超过200位,不会有多余的前导零。
- 输出
- 一行,即所求的差。
- 样例输入
-
9999999999999999999999999999999999999 9999999999999
- 样例输出
-
9999999999999999999999990000000000000
本题是大整数减法,依旧是模板:
#include<stdio.h> #include<string.h> struct bigInteger{ int digit[1000]; int size; void init(){ size=0; for(int i=0;i<1000;i++){ digit[i]=0; } } void set(char str[]){ init(); int len=strlen(str); for(int i=len-1,j=0,t=0,c=1;i>=0;i--){ t+=(str[i]-'0')*c; c*=10; j++; if(j==4||i==0){ digit[size++]=t; j=0; t=0; c=1; } } } void output(){ for(int i=size-1;i>=0;i--){ if(i!=size-1){ printf("%04d",digit[i]); }else{ printf("%d",digit[i]); } } printf("\n"); } bigInteger operator - (const bigInteger &A)const{ //减法 bigInteger ret; ret.init(); int c=0;//借位 int i; for(i=0;i<A.size;i++){ int tmp=digit[i]-A.digit[i]-c; c=0; while(tmp<0){ tmp+=10000; c++; } ret.digit[ret.size++]=tmp; } for(;i<size;i++){ if(c!=0){ ret.digit[ret.size++]=digit[i]-c; c=0; }else{ ret.digit[ret.size++]=digit[i]; } } return ret; } }a,b,c; int main(){ char str1[1000]; char str2[1000]; scanf("%s%s",str1,str2); a.set(str1); b.set(str2); c=a-b; c.output(); }代码虽然长...但是思路比较清楚