본문 바로가기
알고리즘 일기/C++

a la russe 알고리즘

by Beijing_KingGod 2019. 8. 31.

1. 두 정수를 첫번째, 두번째에 쓴다.

 

2. 첫번째 수가 홀수 면, 두번째 수를 세번째 칸에 기록한다.

 

3. 첫번째 수를 2로 나누고 (나머지 버림), 두번째 수에 2를 곱한다.  --> 쉬프트 연산자

 

4. 첫번째 수가 0보다 크면 2로 돌아간다 --> while 문

 

5. 세번째 칸의 수를 모두 더한다.

 

#include <iostream>
#include <vector>
using namespace std;

int main(){
	int a=123;
	int b=28;
	vector<vector<int>> vc;
	vector<int> temp;

	while(a>0){
		temp.push_back(a);
		temp.push_back(b); // 1. 두 정수를 첫번째. 두번째에 쓴다.
		if(a&1){			// 2. 첫번째 수가 홀수 이면 두번째수를 세번째 칸에 기록한다.
			temp.push_back(b);
		}else{
			temp.push_back(0);
		}
		a=a>>1;
		b=b<<1; // 쉬프트 연산 
		vc.push_back(temp);
		temp.clear();
	}
	cout<<"vc 배열 출력"<<endl;
	for(int i=0; i<vc.size(); i++){
		for(int j=0; j<vc[i].size(); j++){
			cout<<vc[i][j];
			cout<<" ";
		}
		cout<<endl;
	}
	cout<<"3번째 벡터 모든합"<<endl;
	int answer=0;
	for(int i=0; i<vc.size(); i++){
		answer+=vc[i][2];
	}
	cout<<"answer="<<answer<<endl;
	cout<<"a*b="<<123*28<<endl;
	system("pause");
	return 0;

}

 

vc 배열 출력
123 28 28
61 56 56
30 112 0
15 224 224
7 448 448
3 896 896
1 1792 1792
3번째 벡터 모든합
answer=3444
a*b=3444

 

 

댓글