1 条题解
-
0
C++ :
#include<iostream> #include<stdlib.h> using namespace std; char s2[32], s1[32]; long long a1, a2; int e1, e2; int main(){ int i, f, s; long long t; while (cin >> s1 >> s2) { a1 = a2 = 0; for (s = f = e1 = i = 0; s1[i]; i++) { if (s1[i] == '-')s = 1; else if (s1[i] == '.')f = 1; else if (s1[i] == 'e' || s1[i] == 'E') { e1 += atoi(s1 + i + 1); break; } else a1 = a1 * 10 + s1[i] - '0', e1 -= f; } if (s)a1 = -a1; for (s = f = e2 = i = 0; s2[i]; i++) { if (s2[i] == '-')s = 1; else if (s2[i] == '.')f = 1; else if (s2[i] == 'e' || s2[i] == 'E') { e2+=atoi(s2 + i + 1); break; } else a2 = a2 * 10 + s2[i] - '0', e2 -= f; } if (s)a2 = -a2; if (e1<e2)for (; e1<e2; e2--)a2 *= 10; else if (e1>e2)for (; e1>e2; e1--)a1 *= 10; a1 += a2; if (!a1){ cout << 0 << endl; continue; } while (e1<0 && a1 % 10 == 0)a1 /= 10, e1++; if (e1 >= 0){ printf("%lld", a1); for (i = 0; i<e1; i++)putchar('0'); cout << endl; continue; } if (a1<0)a1 = -a1, s = 1; else s = 0; for (t = 1, f = 0; t <= a1; t *= 10, f++); if (t>1)t /= 10, f--; if (s)putchar('-'); int m = 0; while (a1){ if(m>0)printf("%lld", a1 / t); else { printf("%lld.", a1 / t); m++; } if (a1>=t){ a1 = a1 - a1 / t*t; }t /= 10; } printf("e%d\n", e1 + f); } return 0; }
Java :
import java.math.BigDecimal; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while (sc.hasNext()) { BigDecimal A = new BigDecimal(sc.next()); BigDecimal B = new BigDecimal(sc.next()); BigDecimal C = A.add(B); if (C.compareTo(BigDecimal.ZERO) == 0) { System.out.println(0); } else if (C.setScale(0, BigDecimal.ROUND_HALF_UP).subtract(C).compareTo(BigDecimal.ZERO) == 0) { System.out.println(C.toPlainString()); } else { String num = C.toPlainString(); while(num.substring(num.length()-1).equals("0")) { num=num.substring(0,num.length()-1); } int index = num.indexOf("."); if (C.compareTo(BigDecimal.ZERO) < 0) { if (C.compareTo(new BigDecimal("-1")) > 0) { int exp = -1; System.out.printf("-%s.%se%d\n", num.substring(3, 4), num.replace(".", "").substring(3), exp); } else { int exp = index - 2; System.out.printf("-%s.%se%d\n", num.substring(1, 2), num.replace(".", "").substring(2), exp); } } else { if (C.compareTo(new BigDecimal("1")) < 0) { int key = 0; for (int i = index + 1; i < num.length(); i++) { if (num.charAt(i) != '0') { key = i; break; } } int exp = index - key; System.out.printf("%s.%se%d\n", num.substring(key, key + 1), num.replace(".", "").substring(key), exp); } else { int exp = index - 1; System.out.printf("%s.%se%d\n", num.substring(0, 1), num.replace(".", "").substring(1), exp); } } } } sc.close(); } }
- 1
信息
- ID
- 1148
- 时间
- 1000ms
- 内存
- 32MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者