题意:
输入两个分数(分子分母各为一个整数中间用'/'分隔),输出它们的四则运算表达式。小数需要用"("和")"括起来,分母为0的话输出"Inf"(输入的分母保证不为0)。
trick:
测试点2很容易溢出,建议遇到乘法时先化简分数并且不要用相乘小于零来判断异号。
AAAAAccepted code:
1 #define HAVE_STRUCT_TIMESPEC 2 #include<bits/stdc++.h> 3 using namespace std; 4 int main(){ 5 ios::sync_with_stdio(false); 6 cin.tie(NULL); 7 cout.tie(NULL); 8 long long a,b,c,d; 9 cin>>a; 10 cin.ignore(); 11 cin>>b>>c; 12 cin.ignore(); 13 cin>>d; 14 long long x=1e9,y=1e9; 15 if(a%b==0) 16 x=a/b; 17 if(c%d==0) 18 y=c/d; 19 long long gcd=__gcd(a,b); 20 a/=gcd; 21 b/=gcd; 22 gcd=__gcd(c,d); 23 c/=gcd; 24 d/=gcd; 25 if(x<1e9){ 26 if(x<0) 27 cout<<"("<<x<<")"; 28 else 29 cout<<x; 30 } 31 else{ 32 long long ta=a,tb=b; 33 if(ta<0&&tb>0||ta>0&&tb<0){ 34 if(ta<0) 35 ta=-ta; 36 if(tb<0) 37 tb=-tb; 38 long long yushu=0; 39 if(ta>tb){ 40 yushu=ta/tb; 41 ta-=yushu*tb; 42 } 43 cout<<"(-"; 44 if(yushu) 45 cout<<yushu<<" "; 46 cout<<ta<<"/"<<tb<<")"; 47 } 48 else{ 49 long long yushu=0; 50 if(ta>tb){ 51 yushu=ta/tb; 52 ta-=yushu*tb; 53 } 54 if(yushu) 55 cout<<yushu<<" "; 56 cout<<ta<<"/"<<tb; 57 } 58 } 59 cout<<" + "; 60 if(y<1e9){ 61 if(y<0) 62 cout<<"("<<y<<")"; 63 else 64 cout<<y; 65 } 66 else{ 67 long long ta=c,tb=d; 68 if(ta<0&&tb>0||ta>0&&tb<0){ 69 if(ta<0) 70 ta=-ta; 71 if(tb<0) 72 tb=-tb; 73 long long yushu=0; 74 if(ta>tb){ 75 yushu=ta/tb; 76 ta-=yushu*tb; 77 } 78 cout<<"(-"; 79 if(yushu) 80 cout<<yushu<<" "; 81 cout<<ta<<"/"<<tb<<")"; 82 } 83 else{ 84 long long yushu=0; 85 if(ta>tb){ 86 yushu=ta/tb; 87 ta-=yushu*tb; 88 } 89 if(yushu) 90 cout<<yushu<<" "; 91 cout<<ta<<"/"<<tb; 92 } 93 } 94 cout<<" = "; 95 long long cd=b*d; 96 long long ab=a*d+c*b; 97 if(ab%cd==0){ 98 long long z=ab/cd; 99 if(z<0) 100 cout<<"("<<z<<")"; 101 else 102 cout<<z; 103 } 104 else if(ab<0&&cd>0||ab>0&&cd<0){ 105 if(ab<0) 106 ab=-ab; 107 if(cd<0) 108 cd=-cd; 109 long long yushu=0; 110 if(ab>cd){ 111 yushu=ab/cd; 112 ab-=yushu*cd; 113 } 114 long long gcd=__gcd(ab,cd); 115 ab/=gcd; 116 cd/=gcd; 117 cout<<"(-"; 118 if(yushu) 119 cout<<yushu<<" "; 120 cout<<ab<<"/"<<cd<<")"; 121 } 122 else{ 123 long long yushu=0; 124 if(ab>cd){ 125 yushu=ab/cd; 126 ab-=yushu*cd; 127 } 128 long long gcd=__gcd(ab,cd); 129 ab/=gcd; 130 cd/=gcd; 131 if(yushu) 132 cout<<yushu<<" "; 133 cout<<ab<<"/"<<cd; 134 } 135 cout<<" "; 136 //加减法分割线------------- 137 if(x<1e9){ 138 if(x<0) 139 cout<<"("<<x<<")"; 140 else 141 cout<<x; 142 } 143 else{ 144 long long ta=a,tb=b; 145 if(ta<0&&tb>0||ta>0&&tb<0){ 146 if(ta<0) 147 ta=-ta; 148 if(tb<0) 149 tb=-tb; 150 long long yushu=0; 151 if(ta>tb){ 152 yushu=ta/tb; 153 ta-=yushu*tb; 154 } 155 cout<<"(-"; 156 if(yushu) 157 cout<<yushu<<" "; 158 cout<<ta<<"/"<<tb<<")"; 159 } 160 else{ 161 long long yushu=0; 162 if(ta>tb){ 163 yushu=ta/tb; 164 ta-=yushu*tb; 165 } 166 if(yushu) 167 cout<<yushu<<" "; 168 cout<<ta<<"/"<<tb; 169 } 170 } 171 cout<<" - "; 172 if(y<1e9){ 173 if(y<0) 174 cout<<"("<<y<<")"; 175 else 176 cout<<y; 177 } 178 else{ 179 long long ta=c,tb=d; 180 if(ta<0&&tb>0||ta>0&&tb<0){ 181 if(ta<0) 182 ta=-ta; 183 if(tb<0) 184 tb=-tb; 185 long long yushu=0; 186 if(ta>tb){ 187 yushu=ta/tb; 188 ta-=yushu*tb; 189 } 190 cout<<"(-"; 191 if(yushu) 192 cout<<yushu<<" "; 193 cout<<ta<<"/"<<tb<<")"; 194 } 195 else{ 196 long long yushu=0; 197 if(ta>tb){ 198 yushu=ta/tb; 199 ta-=yushu*tb; 200 } 201 if(yushu) 202 cout<<yushu<<" "; 203 cout<<ta<<"/"<<tb; 204 } 205 } 206 cout<<" = "; 207 cd=b*d; 208 ab=a*d-c*b; 209 if(ab%cd==0){ 210 long long z=ab/cd; 211 if(z<0) 212 cout<<"("<<z<<")"; 213 else 214 cout<<z; 215 } 216 else if(ab<0&&cd>0||ab>0&&cd<0){ 217 if(ab<0) 218 ab=-ab; 219 if(cd<0) 220 cd=-cd; 221 long long yushu=0; 222 if(ab>cd){ 223 yushu=ab/cd; 224 ab-=yushu*cd; 225 } 226 long long gcd=__gcd(ab,cd); 227 ab/=gcd; 228 cd/=gcd; 229 cout<<"(-"; 230 if(yushu) 231 cout<<yushu<<" "; 232 cout<<ab<<"/"<<cd<<")"; 233 } 234 else{ 235 long long yushu=0; 236 if(ab>cd){ 237 yushu=ab/cd; 238 ab-=yushu*cd; 239 } 240 long long gcd=__gcd(ab,cd); 241 ab/=gcd; 242 cd/=gcd; 243 if(yushu) 244 cout<<yushu<<" "; 245 cout<<ab<<"/"<<cd; 246 } 247 cout<<" "; 248 //减法和乘除法分隔线------------- 249 if(x<1e9){ 250 if(x<0) 251 cout<<"("<<x<<")"; 252 else 253 cout<<x; 254 } 255 else{ 256 long long ta=a,tb=b; 257 if(ta<0&&tb>0||ta>0&&tb<0){ 258 if(ta<0) 259 ta=-ta; 260 if(tb<0) 261 tb=-tb; 262 long long yushu=0; 263 if(ta>tb){ 264 yushu=ta/tb; 265 ta-=yushu*tb; 266 } 267 cout<<"(-"; 268 if(yushu) 269 cout<<yushu<<" "; 270 cout<<ta<<"/"<<tb<<")"; 271 } 272 else{ 273 long long yushu=0; 274 if(ta>tb){ 275 yushu=ta/tb; 276 ta-=yushu*tb; 277 } 278 if(yushu) 279 cout<<yushu<<" "; 280 cout<<ta<<"/"<<tb; 281 } 282 } 283 cout<<" * "; 284 if(y<1e9){ 285 if(y<0) 286 cout<<"("<<y<<")"; 287 else 288 cout<<y; 289 } 290 else{ 291 long long ta=c,tb=d; 292 if(ta<0&&tb>0||ta>0&&tb<0){ 293 if(ta<0) 294 ta=-ta; 295 if(tb<0) 296 tb=-tb; 297 long long yushu=0; 298 if(ta>tb){ 299 yushu=ta/tb; 300 ta-=yushu*tb; 301 } 302 cout<<"(-"; 303 if(yushu) 304 cout<<yushu<<" "; 305 cout<<ta<<"/"<<tb<<")"; 306 } 307 else{ 308 long long yushu=0; 309 if(ta>tb){ 310 yushu=ta/tb; 311 ta-=yushu*tb; 312 } 313 if(yushu) 314 cout<<yushu<<" "; 315 cout<<ta<<"/"<<tb; 316 } 317 } 318 cout<<" = "; 319 cd=b*d; 320 ab=a*c; 321 if(ab%cd==0){ 322 long long z=ab/cd; 323 if(z<0) 324 cout<<"("<<z<<")"; 325 else 326 cout<<z; 327 } 328 else if(ab<0&&cd>0||ab>0&&cd<0){ 329 if(ab<0) 330 ab=-ab; 331 if(cd<0) 332 cd=-cd; 333 long long yushu=0; 334 if(ab>cd){ 335 yushu=ab/cd; 336 ab-=yushu*cd; 337 } 338 long long gcd=__gcd(ab,cd); 339 ab/=gcd; 340 cd/=gcd; 341 cout<<"(-"; 342 if(yushu) 343 cout<<yushu<<" "; 344 cout<<ab<<"/"<<cd<<")"; 345 } 346 else{ 347 long long yushu=0; 348 if(ab>cd){ 349 yushu=ab/cd; 350 ab-=yushu*cd; 351 } 352 long long gcd=__gcd(ab,cd); 353 ab/=gcd; 354 cd/=gcd; 355 if(yushu) 356 cout<<yushu<<" "; 357 cout<<ab<<"/"<<cd; 358 } 359 cout<<" "; 360 //乘除法分隔线------------- 361 if(x<1e9){ 362 if(x<0) 363 cout<<"("<<x<<")"; 364 else 365 cout<<x; 366 } 367 else{ 368 long long ta=a,tb=b; 369 if(ta<0&&tb>0||ta>0&&tb<0){ 370 if(ta<0) 371 ta=-ta; 372 if(tb<0) 373 tb=-tb; 374 long long yushu=0; 375 if(ta>tb){ 376 yushu=ta/tb; 377 ta-=yushu*tb; 378 } 379 cout<<"(-"; 380 if(yushu) 381 cout<<yushu<<" "; 382 cout<<ta<<"/"<<tb<<")"; 383 } 384 else{ 385 long long yushu=0; 386 if(ta>tb){ 387 yushu=ta/tb; 388 ta-=yushu*tb; 389 } 390 if(yushu) 391 cout<<yushu<<" "; 392 cout<<ta<<"/"<<tb; 393 } 394 } 395 cout<<" / "; 396 if(y<1e9){ 397 if(y<0) 398 cout<<"("<<y<<")"; 399 else 400 cout<<y; 401 } 402 else{ 403 long long ta=c,tb=d; 404 if(ta<0&&tb>0||ta>0&&tb<0){ 405 if(ta<0) 406 ta=-ta; 407 if(tb<0) 408 tb=-tb; 409 long long yushu=0; 410 if(ta>tb){ 411 yushu=ta/tb; 412 ta-=yushu*tb; 413 } 414 cout<<"(-"; 415 if(yushu) 416 cout<<yushu<<" "; 417 cout<<ta<<"/"<<tb<<")"; 418 } 419 else{ 420 long long yushu=0; 421 if(ta>tb){ 422 yushu=ta/tb; 423 ta-=yushu*tb; 424 } 425 if(yushu) 426 cout<<yushu<<" "; 427 cout<<ta<<"/"<<tb; 428 } 429 } 430 cout<<" = "; 431 cd=b*c; 432 ab=a*d; 433 if(cd==0){ 434 cout<<"Inf"; 435 return 0; 436 } 437 if(ab%cd==0){ 438 long long z=ab/cd; 439 if(z<0) 440 cout<<"("<<z<<")"; 441 else 442 cout<<z; 443 } 444 else if(ab<0&&cd>0||ab>0&&cd<0){ 445 if(ab<0) 446 ab=-ab; 447 if(cd<0) 448 cd=-cd; 449 long long yushu=0; 450 if(ab>cd){ 451 yushu=ab/cd; 452 ab-=yushu*cd; 453 } 454 long long gcd=__gcd(ab,cd); 455 ab/=gcd; 456 cd/=gcd; 457 cout<<"(-"; 458 if(yushu) 459 cout<<yushu<<" "; 460 cout<<ab<<"/"<<cd<<")"; 461 } 462 else{ 463 long long yushu=0; 464 if(ab>cd){ 465 yushu=ab/cd; 466 ab-=yushu*cd; 467 } 468 long long gcd=__gcd(ab,cd); 469 ab/=gcd; 470 cd/=gcd; 471 if(yushu) 472 cout<<yushu<<" "; 473 cout<<ab<<"/"<<cd; 474 } 475 return 0; 476 }