//a와b의 곱 = a와b의최대공약수 * a와b의최소공배수
/*
#include <stdio.h>
int gcd(int p, int q){ if(p==0) return q; return gcd(q%p, p);}
long long int lcm(int a,int b)
{
return (long long int)a * b / gcd(a,b);
}
int main()
{
int a, b;
scanf("%d%d", &a, &b);
printf("%lld\n", lcm(a, b));
}
*/
/*
#include <stdio.h>
int n, a, b, d[1010];
long long int subsetsum(int a, int b) {
long long int c=0;
int i=0;
for(i=a; i<=b; i++) {
c+=d[i];
}
return c;
}
int main() {
scanf("%d", &n);
for(int i=1; i<=n; i++)
scanf("%d", &d[i]);
scanf("%d%d", &a, &b);
printf("%lld\n", subsetsum(a, b));
}
*/
/*
#include <stdio.h>
int n, k, d[1010];
int findi(int k)
{
for(int i=1;i<=n;i++)
{
if(d[i]==k)
return i;
}
return -1;
}
int main()
{
scanf("%d", &n);
for(int i=1; i<=n; i++)
scanf("%d", &d[i]);
scanf("%d", &k);
printf("%d\n", findi(k));
}
n n%10 p
123 3 3
12 2 32
1 1 321
0
*/
/*
#include <stdio.h>
long long int n;
long long int f(long long int n) {
long long int p=0;
while(n!=0) {
p=((n%10)+p*10);
n/=10;
}
return p;
}
int main() {
scanf("%lld", &n);
printf("%lld\n", f(n));
}
재귀함수 (recursive function)
특징
1. 코드가 짧아 -> 어려워
2. 말이 돼 -> 이해가 잘 x 이게 왜 돼지??
정의
1. 함수 내에서 자신을 다시 호출하는 함수
2. 자신으로 다시 정의내려
rec(n) : n부터 1까지 출력
: n출력 -> n-1출력 -> .... 1출력
: n출력 -> n-1부터 1까지 출력
: n출력 -> rec(n-1)
rec(3) : 3출력 -> rec(2)
rec(2) : 2출력 -> rec(1)
rec(1) : 1출력 -> rec(0)
rec(0) : return ;
#include <stdio.h>
void rec(int n)
{
if(n==0) return ;
printf("%d ",n);
rec(n-1); //재귀호출
}
int main()
{
rec(3);
return 0;
}
rec(n) : 1부터 n까지 출력
: 1출력 ->...-> n-1출력 -> n출력
: 1부터 n-1까지출력 -> n출력
: rec(n-1) -> n출력
#include <stdio.h>
void rec(int n)
{
if(n==0) return;
rec(n-1);
printf("%d ",n);
}
int main()
{
int n;
scanf("%d", &n);
rec(n);
return 0;
}
rec(a,b) : a부터 b까지 출력
: a출력 -> a+1출력 ... -> b출력
: a출력 -> a+1부터 b까지 출력
: a출력 -> rec(a+1,b);
#include<stdio.h>
void rec(int a,int b)
{
if(a>b) return;
printf("%d ", a);
rec(a+1,b);
}
int main()
{
int a, b;
scanf("%d %d",&a, &b);
rec(a, b);
return 0;
}
*/