UVa 465 : Overflow
問題リンク:Overflow
問題概要:
a + b
または
a * b
が与えられる(a,bはとても大きい値)
入力をそのまま出力した後に
a が 2^31-1 より大きいなら first number too big と、
b が 2^31-1 より大きいなら second number too big と、
a + b または a * b の結果が 2^31-1 より大きいなら result too big とこの順番で出力せよ
解法:
java で BigInteger を使って計算し問題概要の通りに出力する
コード:
import java.util.*; import java.io.*; import java.math.*; class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); while(in.hasNext()) { String line = in.nextLine(); String a = new String(""); String b = new String(""); BigInteger PW = new BigInteger("2147483647"); int i; boolean plus,multi; plus = false; multi = false; for(i=0;i<line.length();i++) { if(line.charAt(i) == ' ')continue; if(line.charAt(i) == '+') { plus = true; break; } if (line.charAt(i) == '*') { multi = true; break; } a += line.charAt(i); } i++; for(;i<line.length();i++) { if(line.charAt(i) == ' ')continue; b += line.charAt(i); } BigInteger L = new BigInteger(a); BigInteger R = new BigInteger(b); System.out.println(line); if(L.compareTo(PW) > 0) { System.out.println("first number too big"); } if(R.compareTo(PW) > 0) { System.out.println("second number too big"); } if(plus) { BigInteger M = L.add(R); if(M.compareTo(PW) > 0) { System.out.println("result too big"); } } if(multi) { BigInteger M = L.multiply(R); if(M.compareTo(PW) > 0) { System.out.println("result too big"); } } } } }||< *1385151525*[UVa][BigInteger] UVa 424 : Integer Inquiry 問題リンク:[http://uva.onlinejudge.org/external/4/424.html:title] 問題概要: とても大きい値が複数与えられる それらの和をとれ 解法: javaのBigIntegerを使って足し算する コード: >|c| import java.io.*; import java.util.*; import java.math.*; class Main { public static void main(String args[]) { Scanner in = new Scanner(System.in); String st; BigInteger ans = new BigInteger("0"); while(true) { st = in.next(); if(st.compareTo("0") == 0)break; ans = ans.add(new BigInteger(st)); } System.out.println(ans); } }