■ 整数の各桁を足し合わせる問題
■ ということで、作ってみた
負数が入力だった場合どうすれば良いのか解らなかったので、とりあえずマイナスは無視して数字を全部足す事にした。
・無難(?)な回答
public class PlaceNumberAdder02 {
long number;
public PlaceNumberAdder02(long number){
setNumber(number);
}
public long addNumbers(){
long number = this.number;
long sum = 0;
number = Math.abs(number);
do {
sum += number % 10;
} while((number /= 10) != 0);
return sum;
}
public void setNumber(long number){
this.number = number;
}
public long getNumber(){
return number;
}
}
long number;
public PlaceNumberAdder02(long number){
setNumber(number);
}
public long addNumbers(){
long number = this.number;
long sum = 0;
number = Math.abs(number);
do {
sum += number % 10;
} while((number /= 10) != 0);
return sum;
}
public void setNumber(long number){
this.number = number;
}
public long getNumber(){
return number;
}
}
・変態(?)回答
public class PlaceNumberAdder01 {
long number;
public PlaceNumberAdder01(long number){
setNumber(number);
}
public long addNumbers(){
String numberStr = String.valueOf(number);
long sum = 0;
if(number < 0){
numberStr = numberStr.substring(1);
}
for(int i = 0; i < numberStr.length(); i++){
sum += Integer.parseInt(numberStr.substring(i, i+1));
}
return sum;
}
public void setNumber(long number){
this.number = number;
}
public long getNumber(){
return number;
}
}
変態回答が01なのが問題だよねー。long number;
public PlaceNumberAdder01(long number){
setNumber(number);
}
public long addNumbers(){
String numberStr = String.valueOf(number);
long sum = 0;
if(number < 0){
numberStr = numberStr.substring(1);
}
for(int i = 0; i < numberStr.length(); i++){
sum += Integer.parseInt(numberStr.substring(i, i+1));
}
return sum;
}
public void setNumber(long number){
this.number = number;
}
public long getNumber(){
return number;
}
}
・...言い訳をさせてもらうと
「3の倍数 or 3を含む」数の時にアホと表示するプログラムを書いた時に、数字を文字に変換して処理を行ったもんで、今回もそののりで書いてみた感じ。
普通に処理した場合(PlaceNumberAdder02)に比べて2から2.5倍くらい遅くなります。
しかし、プログラムの形的にも面白みの無い物になってしまったなぁ...。
あと、名前とかもっと考えようよ、自分。
普通に処理した場合(PlaceNumberAdder02)に比べて2から2.5倍くらい遅くなります。
しかし、プログラムの形的にも面白みの無い物になってしまったなぁ...。
あと、名前とかもっと考えようよ、自分。
■ テスト
・テストコード(とは言えない何か)
public class PlaceNumberAdderTest {
static final long l1 = 1234, l2 = 9999, l3 = -65535;
public static void main(String[] args) {
System.out.println("Number = " + l1);
PlaceNumberAdder01 pna1 = new PlaceNumberAdder01(l1);
System.out.println("pna1: " + pna1.addNumbers());
PlaceNumberAdder02 pna2 = new PlaceNumberAdder02(l1);
System.out.println("pna2: " + pna2.addNumbers());
System.out.println();
System.out.println("Number = " + l2);
pna1.setNumber(l2);
System.out.println("pna1: " + pna1.addNumbers());
pna2.setNumber(l2);
System.out.println("pna2: " + pna2.addNumbers());
System.out.println();
System.out.println("Number = " + l3);
pna1.setNumber(l3);
System.out.println("pna1: " + pna1.addNumbers());
pna2.setNumber(l3);
System.out.println("pna2: " + pna2.addNumbers());
}
}
static final long l1 = 1234, l2 = 9999, l3 = -65535;
public static void main(String[] args) {
System.out.println("Number = " + l1);
PlaceNumberAdder01 pna1 = new PlaceNumberAdder01(l1);
System.out.println("pna1: " + pna1.addNumbers());
PlaceNumberAdder02 pna2 = new PlaceNumberAdder02(l1);
System.out.println("pna2: " + pna2.addNumbers());
System.out.println();
System.out.println("Number = " + l2);
pna1.setNumber(l2);
System.out.println("pna1: " + pna1.addNumbers());
pna2.setNumber(l2);
System.out.println("pna2: " + pna2.addNumbers());
System.out.println();
System.out.println("Number = " + l3);
pna1.setNumber(l3);
System.out.println("pna1: " + pna1.addNumbers());
pna2.setNumber(l3);
System.out.println("pna2: " + pna2.addNumbers());
}
}
・実行結果
Number = 1234
pna1: 10
pna2: 10
Number = 9999
pna1: 36
pna2: 36
Number = -65535
pna1: 24
pna2: 24
こんな感じ。pna1: 10
pna2: 10
Number = 9999
pna1: 36
pna2: 36
Number = -65535
pna1: 24
pna2: 24