大数加减法模板
Posted redblackk
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大数加减法模板相关的知识,希望对你有一定的参考价值。
1 #include <iostream> 2 #include <string.h> 3 #include <string> 4 using namespace std; 5 char s1[10005],s2[10005]; 6 int a[10005],b[10005],c[10005]; 7 int flag; 8 int main() 9 { 10 cin>>s1; 11 cin>>s2; 12 int len1=strlen(s1),len2=strlen(s2); 13 int p1=0,p2=0; 14 15 if(s1[0]!=‘-‘ && s2[0]!=‘-‘) 16 { 17 for(int i=len1-1;i>=0;i--) a[p1++]=s1[i]-‘0‘; 18 for(int j=len2-1;j>=0;j--) b[p2++]=s2[j]-‘0‘; 19 int len=len1>len2?len1:len2; 20 for(int i=0;i<=len-1;i++) 21 { 22 c[i]+=a[i]+b[i]; 23 while(c[i]>=10) 24 { 25 c[i]-=10; 26 c[i+1]+=1; 27 } 28 } 29 if(c[len]!=0) cout<<c[len]; 30 for(int i=len-1;i>=0;i--) cout<<c[i]; 31 cout<<endl; 32 } 33 34 else if(s1[0]==‘-‘ && s2[0]==‘-‘) 35 { 36 for(int i=len1-1;i>=1;i--) a[p1++]=s1[i]-‘0‘; 37 for(int j=len2-1;j>=1;j--) b[p2++]=s2[j]-‘0‘; 38 int len=len1>len2?len1:len2; 39 for(int i=0;i<=len-1-1;i++) 40 { 41 c[i]+=a[i]+b[i]; 42 while(c[i]>=10) 43 { 44 c[i]-=10; 45 c[i+1]+=1; 46 } 47 } 48 //if(c[len]!=0) cout<<c[len]; 因为负号原因,减1,可以省去,用下面一行 49 cout<<‘-‘; 50 if(c[len-1]!=0) cout<<c[len-1]; 51 for(int i=len-1-1;i>=0;i--) cout<<c[i]; 52 cout<<endl; 53 } 54 55 else if(s1[0]==‘-‘ && s2[0]!=‘-‘) 56 { 57 for(int i=0;i<=len1-1;i++) s1[i]=s1[i+1]; 58 len1=strlen(s1); 59 60 if(len1==len2) 61 { 62 if(strcmp(s1,s2)>0) flag=-1; 63 else if(strcmp(s1,s2)<0) flag=1; 64 65 for(int i=len1-1;i>=0;i--) a[p1++]=s1[i]-‘0‘; 66 for(int j=len2-1;j>=0;j--) b[p2++]=s2[j]-‘0‘; 67 int len=len1>len2?len1:len2; 68 if(flag==0) cout<<‘0‘<<endl; 69 else if(flag==-1) 70 { 71 for(int i=0;i<=len-1;i++) 72 { 73 c[i]+=a[i]-b[i]; 74 while(c[i]<0) 75 { 76 c[i]+=10; 77 c[i+1]-=1; 78 } 79 } 80 cout<<‘-‘; 81 } 82 else if(flag==1) 83 { 84 for(int i=0;i<=len-1;i++) 85 { 86 c[i]+=b[i]-a[i]; 87 while(c[i]<0) 88 { 89 c[i]+=10; 90 c[i+1]-=1; 91 } 92 } 93 } 94 /*if(c[len]!=0) cout<<c[len]; 95 for(int i=len-1;i>=0;i--) cout<<c[i];*/ //减法不能这么输出,如12,19,是07,可能会减出前导0 96 int j; 97 for(j=len;j>=0;j--) if(c[j]!=0) break; 98 for(int i=j;i>=0;i--) cout<<c[i]; 99 cout<<endl; 100 } 101 102 else if(len1>len2) 103 { 104 for(int i=len1-1;i>=0;i--) a[p1++]=s1[i]-‘0‘; 105 for(int j=len2-1;j>=0;j--) b[p2++]=s2[j]-‘0‘; 106 int len=len1>len2?len1:len2; 107 for(int i=0;i<=len-1;i++) 108 { 109 c[i]+=a[i]-b[i]; 110 while(c[i]<0) 111 { 112 c[i]+=10; 113 c[i+1]-=1; 114 } 115 } 116 cout<<‘-‘; 117 int j; 118 for(j=len;j>=0;j--) if(c[j]!=0) break; 119 for(int i=j;i>=0;i--) cout<<c[i]; 120 cout<<endl; 121 } 122 123 else if(len1<len2) 124 { 125 for(int i=len1-1;i>=0;i--) a[p1++]=s1[i]-‘0‘; 126 for(int j=len2-1;j>=0;j--) b[p2++]=s2[j]-‘0‘; 127 int len=len1>len2?len1:len2; 128 for(int i=0;i<=len-1;i++) 129 { 130 c[i]+=b[i]-a[i]; 131 while(c[i]<0) 132 { 133 c[i]+=10; 134 c[i+1]-=1; 135 } 136 } 137 int j; 138 for(j=len;j>=0;j--) if(c[j]!=0) break; 139 for(int i=j;i>=0;i--) cout<<c[i]; 140 cout<<endl; 141 } 142 } 143 144 else if(s1[0]!=‘-‘ && s2[0]==‘-‘) 145 { 146 for(int i=0;i<=len2-1;i++) s2[i]=s2[i+1]; 147 len2=strlen(s2); 148 149 if(len1==len2) 150 { 151 if(strcmp(s1,s2)>0) flag=1; 152 else if(strcmp(s1,s2)<0) flag=-1; 153 154 for(int i=len1-1;i>=0;i--) a[p1++]=s1[i]-‘0‘; 155 for(int j=len2-1;j>=0;j--) b[p2++]=s2[j]-‘0‘; 156 int len=len1>len2?len1:len2; 157 if(flag==0) cout<<‘0‘<<endl; 158 else if(flag==1) 159 { 160 for(int i=0;i<=len-1;i++) 161 { 162 c[i]+=a[i]-b[i]; 163 while(c[i]<0) 164 { 165 c[i]+=10; 166 c[i+1]-=1; 167 } 168 } 169 } 170 else if(flag==-1) 171 { 172 for(int i=0;i<=len-1;i++) 173 { 174 c[i]+=b[i]-a[i]; 175 while(c[i]<0) 176 { 177 c[i]+=10; 178 c[i+1]-=1; 179 } 180 } 181 cout<<‘-‘; 182 } 183 /*if(c[len]!=0) cout<<c[len]; 184 for(int i=len-1;i>=0;i--) cout<<c[i];*/ //减法不能这么输出,如12,19,是07,可能会减出前导0 185 int j; 186 for(j=len;j>=0;j--) if(c[j]!=0) break; 187 for(int i=j;i>=0;i--) cout<<c[i]; 188 cout<<endl; 189 } 190 191 else if(len1>len2) 192 { 193 for(int i=len1-1;i>=0;i--) a[p1++]=s1[i]-‘0‘; 194 for(int j=len2-1;j>=0;j--) b[p2++]=s2[j]-‘0‘; 195 int len=len1>len2?len1:len2; 196 for(int i=0;i<=len-1;i++) 197 { 198 c[i]+=a[i]-b[i]; 199 while(c[i]<0) 200 { 201 c[i]+=10; 202 c[i+1]-=1; 203 } 204 } 205 int j; 206 for(j=len;j>=0;j--) if(c[j]!=0) break; 207 for(int i=j;i>=0;i--) cout<<c[i]; 208 cout<<endl; 209 } 210 211 else if(len1<len2) 212 { 213 for(int i=len1-1;i>=0;i--) a[p1++]=s1[i]-‘0‘; 214 for(int j=len2-1;j>=0;j--) b[p2++]=s2[j]-‘0‘; 215 int len=len1>len2?len1:len2; 216 for(int i=0;i<=len-1;i++) 217 { 218 c[i]+=b[i]-a[i]; 219 while(c[i]<0) 220 { 221 c[i]+=10; 222 c[i+1]-=1; 223 } 224 } 225 cout<<‘-‘; 226 int j; 227 for(j=len;j>=0;j--) if(c[j]!=0) break; 228 for(int i=j;i>=0;i--) cout<<c[i]; 229 cout<<endl; 230 } 231 } 232 233 return 0; 234 }
以上是关于大数加减法模板的主要内容,如果未能解决你的问题,请参考以下文章