大数减法
发布时间:2020-12-14 03:29:43 所属栏目:大数据 来源:网络整理
导读:/*输入两行字符串正整数,第一行是被减数,第二行是减数,输出第一行减去第二行的结果。 */#include iostream#include string.husing namespace std;//char a[1001];//char b[1001];void bigPlus(char *a,char *b,bool flag){// a = "123456" b= "43"char re
/*输入两行字符串正整数,第一行是被减数,第二行是减数,输出第一行减去第二行的结果。 */ #include <iostream> #include <string.h> using namespace std; //char a[1001]; //char b[1001]; void bigPlus(char *a,char *b,bool flag) { // a = "123456" b= "43" char result[1002]; int temp = 0; int i,j,diff; diff = strlen(a) - strlen(b); for(i=strlen(a)-1,j=0; (i-diff)>=0; i--){ int s = (a[i]-'0')+(b[i-diff]-'0')+temp; result[j++] =s%10+'0'; temp = s/10; } for(; i>=0; i--){ int s = a[i]-'0' + temp; result[j++] =s%10+'0'; temp = s/10; } if(temp > 0) result[j++] = temp+'0'; if(!flag) result[j++] = '-'; for(i=j-1; i>=0; i--) cout<<result[i]; } void bigMinus(char *a,bool flag) { char result[1002]; int alength = strlen(a); int blength = strlen(b); int temp = 0; int i,diff,p; diff = strlen(a) - strlen(b); for(i=alength-1,j=0; (i-diff)>=0; i--){ int s = (a[i]-'0')- (b[i-diff]-'0'); if(s<0){ p = i-1; while(a[p] == '0' && p>=0) p--; a[p] = a[p]-'1'+'0'; p++; while(p != i){ a[p] = '9'; p++; } s += 10; } result[j++] = s+'0'; } for(; i>=0; i--){ if(i==0 && a[i]=='0') break; else result[j++] = a[i]; } if(!flag){ while(result[j-1] == '0'){ result[j-1] = ' '; j=j-1; } result[j++] = '-'; result[j] = ' '; }else{ j--; while(result[j] == '0'){ result[j] = ' '; j--; } j++; result[j] = ' '; } // cout<<strlen(result)<<endl; // if(flag) for(i=strlen(result)-1; i>=0; i--) cout<<result[i]; // else // for(i=j-1; i>=0; i--) cout<<result[i]; cout<<endl; } void select(char *a,char *b) { int alength = strlen(a); int blength = strlen(b); if(alength > blength){ bigMinus(a,b,true); }else if(alength == blength){ if(strcmp(a,b) == 1) bigMinus(a,true); else if(strcmp(a,b) == 0) cout<<'0'<<endl; else bigMinus(b,a,false); }else{ bigMinus(b,false); } } int main() { while(true){ char a[1001]; char b[1001]; cin >> a; cin >> b; int alength = strlen(a); int blength = strlen(b); bool flag = true; if(a[0] != '-' && b[0] == '-'){//a-(-b) if(alength >= (blength-1)) bigPlus(a,b+1,true); else bigPlus(b+1,true); }else if(a[0] == '-' && b[0] != '-'){//-a-b if((alength-1) >= blength) bigPlus(a+1,false); else bigPlus(b,a+1,false); }else if(a[0] != '-' && b[0] != '-'){//a-b select(a,b); }else{//-a-(-b) select(b+1,a+1); } } //cout<<a+1<<endl; return 0; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |