#include <iostream> #include <string>using namespace Std;int comparestr (String str1, String str2) {int NUM1 = Str1.length (); int num2 = Str2.length (); if (num1>num2) return 1; if (num1<num2) return-1; if (num1==num2) {for (int i=0; i<num1; i++) {if (Str1[i]>str2[i]) { return 1; } else if (Str1[i]<str2[i]) {return-1; } else {}} return 0; }}string rever (String str) {int num = str.length (); string tmp = str; for (int i=0; i<num; i++) {tmp[i] = str[num-1-i]; } return TMP; String MNS (String str1, String str2) {int num1 = Str1.length (); int num2 = Str2.length (); String tmp1 = Rever (STR1); String tmp2 = Rever (STR2); Char buf[100]; int count = 0; int carry = 0; for (int i=0; i<num1; i++) {if (i<num2) {if (TMP1[i]-' 0 '-carry >= tmp2[i]-' 0 ') {char ch = tmp1[i]-' 0 '-carry-(tmp2[i]-' 0 ') + ' 0 '; buf[count++] = ch; carry = 0; } else {Char ch = tmp1[i]-' 0 '-carry-(tmp2[i]-' 0 ') + 10 + ' 0 '; buf[count++] = ch; carry = 1; }} else {if (tmp1[i]-' 0 '-carry >= 0) {Char ch = tmp1[i]-' 0 ' -carry; buf[count++] = ch; carry = 0; } else {Char ch = ' 9 '; buf[count++] = ch; carry = 1; }}} Buf[count] = ' + '; for (count--; count>0 && buf[count]== ' 0 '; count--); Buf[count+1] = ' + '; return Rever (BUF);} String Add (String str1, String str2) {int num1 = Str1.length (); int num2 = Str2.length (); int maxnum = NUM1 > num2? num1:num2; int minnum = num1 > num2? NUM2:NUM1; String tmp1 = Rever (STR1); String tmp2 = Rever (STR2); Char buf[100]; int count = 0; int carry = 0; for (int i=0; i<maxnum; i++) {if (i<minnum) {if (tmp1[i]+tmp2[i]-' 0 '-' 0 ' + carry) >=10 {Char ch = (tmp1[i]+tmp2[i]-' 0 '-' 0 ' -10) + ' 0 ' + carry; res = res + string (&ch); buf[count++] = ch; carry = 1; } else {char ch = (tmp1[i]+tmp2[i]-' 0 '-' 0 ') + ' 0 ' + carry; res = res + string (&ch); buf[count++] = ch; carry = 0; }} else {if (Num1 > Num2) {if ((Carry + tmp1[i]-' 0 ') > = ten) {char ch = (tmp1[i]-' 0 ' -10) + carry + ' 0 '; res = res + string (&ch); buf[count++] = ch; carry = 1; } else {char ch = (tmp1[i]-' 0 ') + carry + ' 0 '; res = res + string (&ch); buf[count++] = ch; carry = 0; }} else {if ((Carry + tmp2[i]-' 0 ') >= 10) { char ch = (tmp2[i]-' 0 ' -10) + carry + ' 0 '; res = res + string (&ch); buf[count++] = ch; carry = 1; } else {char ch = (tmp2[i]-' 0 ') + carry + ' 0 '; res = res + string (&ch); buf[count++] = ch; carry = 0; }}}} if (carry==1) {char ch = ' 1 '; res = res + string (&ch); buf[count++] = ch; } Buf[count] = ' + '; return Rever (BUF);;} void Solve (String str1, String str2) {if (str1[0]== '-' && str2[0]== '-') {string tmp1; String tmp2; TMP1 = STR1.SUBSTR (1); TMP2 = STR2.SUBSTR (1); cout<< '-' <<add (TMP1,TMP2); } else if (str1[0]== '-' && str2[0]!= '-') {string tmp1; String tmp2; TMP1 = STR1.SUBSTR (1); TMP2 = str2; if (Comparestr (TMP1,TMP2) >0) {cout<< '-' <<mns (TMP1,TMP2); } else if (Comparestr (TMP1,TMP2) ==0) {cout<< ' 0 '; } else {cout<<mns (TMP2,TMP1); }} else if (str1[0]!= '-' && str2[0]== '-') {string tmp1; String tmp2; TMP1 = str1; TMP2 = STR2.SUBSTR (1); if (Comparestr (TMP1,TMP2) >0) {cout<<mns (TMP1,TMP2); } else if (Comparestr (TMP1,TMP2) ==0) {cout<< ' 0 '; } else {cout<< '-' <<mns (TMP2,TMP1); } } else {string tmp1 = str1; string tmp2 = str2; Cout<<add (TMP1,TMP2); }}int Main () {string str1, str2; cin>>str1>>str2; Solve (str1, str2); return 0;}
Wireless oss-High-precision integer addition