1부터 n까지 정수의 합 구하기
- while문 반복
반복구조 : 어떤 조건이 성립되는 동안 처리를 반복하여 실행하는 것(루프)
while문 형식 : while(제어식) 명령문
int sum = 0; int i = 1; while (i <= n) { //변수 i값이 n이하인 동안 i값을 1씩 증가하면서 n회 반복실행 sum += i; i++;
|
- 가우스의 덧셈을 활용한 식
ex)1~10의 합은 (1+10)*5
int sum = (1+n)*(n/2) + (n%2==1?(n+1)/2:0);
|
- for문 반복
: 하나의 변수를 사용하는 반복문은 while문보다 for문을 사용하는 것이 좋다.
for문 형식 : for(초기화부분; 제어식; 업데이트부분) 명령문
int sum = 0; for(int i=1; i<=n; i++) sum += i; //sum에 i를 더한다.
|
- 정수 a,b 포함 그 사이의 모든 정수의 합을 구하는 for문
static int sumof(int a, int b) { int min; int max; if(a<b) { min=a; max=b; }else { min=b; max=a; } int sum = 0; for (int i=min; i<=max; i++) sum += i; return sum; }
|
-int i=min처럼 for문 안에 선언된 변수는 for문 안에서만 사용이 가능하다. 만약 for문을 종료한 이후에도 변숫값을 사용하려면 for문앞에 int i; 와 같이 변수를 선언해주면된다.
- i<=max와 같은 제어식은 생략이 가능하지만, 생략 시 본문에 break문이나 return문이 없으면 무한반복된다.
-i++와 같은 업데이트 부분은 쉼표로 구분하여 여러 개의 식을 작성할 수도 있고 생략할 수도 있다.
양수만 입력받아 1부터 n까지의 합 구하기
- do-while문
do-while문 형식 : do-while(제어식); (while,for문과 다르게 뒤에 ;이 붙는다!)
do { System.out.print("n값 : "); n = sc.nextInt(); }while (n <= 0); // n값이 0이하이면 루프 본문이 반복 실행됨. -> n값 : 이 계속 출력됨. // 따라서 n값은 양수이어야 한다. int sum = 0; for(int i=1; i<=n; i++) sum += i;
|
- 특정 변수가 다른 변수보다 큰 값이 나오도록 할 때
int a = sc.nextInt(); int b; //while문이 끝난 뒤에도 변숫값을 사용할 수 있도록 while(true) { System.out.print("b의 값 : "); b = sc.nextInt(); if(b>a) break; System.out.println("a보다 큰 값을 입력하세요."); } System.out.println("b-a는 " + (b-a) + "입니다.");
|
- 양의 정수를 입력하고 자릿수를 출력하도록 할 때
int a; do { System.out.print("정숫값 : "); a = sc.nextInt(); }while(a<=0); //양의 정수이미로 0보다 작거나 같을 경우 반복됨. int no = 0; while(a>0) { a /= 10; no++; } //a가 40일 경우 40/=10 = 4; no++ = 1; // 이후 4/10=0이하; no++2; -> 반복되는 횟수가 자릿수 //조건식과 부합하지 않아 while문으로 빠져나감 //a가 110일 경우 120/=10 = 12; no++1; // 12/=10 = 1.2; no++2; // 1.2/10 = 0이하; no++3; while문으로 빠져나감 System.out.println(no + "자리입니다.");
|