1. 程式人生 > >大數加減法模板

大數加減法模板

for namespace name col pre 加減 break n-1 加減法

  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 }

大數加減法模板