티스토리 뷰
숫자 4를 사용하지 못하므로 기존의 10진법에서 4를 하나 뺀 9진법으로 생각하자. 4 이상의 숫자들을 하나씩 줄여준 다음 10진법으로 바꾼다. 0층이 없으므로 부호에 따라 계산에 유의하자.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 |
#include <stdio.h>
typedef long long ll;
ll cvt(char *a,ll len,ll sign)
{
ll start=sign?0:1,ret=0;
for(ll i=len-1,j=1;i>=start;i--,j*=9)
{
if(a[i]>'3') a[i]--;
ret+=(a[i]-'0')*j;
}
return ret;
}
int main()
{
ll t;
scanf("%lld",&t);
for(ll k=1;k<=t;k++)
{
char a[20],b[20];
scanf("%s %s",a,b);
ll la=0,lb=0; // 길이
while(a[la]) la++;
while(b[lb]) lb++;
ll sa=1,sb=1; // 부호
if(a[0]=='-') sa=0;
if(b[0]=='-') sb=0;
ll A,B,ans;
A=cvt(a,la,sa),B=cvt(b,lb,sb);
if(!sa && !sb) ans=A-B;
else if(!sa && sb) ans=A+B-1;
else ans=B-A;
printf("#%lld %lld\n",k,ans);
}
return 0;
} |
cs |
'Algorithm > SW Expert Academy' 카테고리의 다른 글
1251 하나로 (0) | 2018.09.06 |
---|---|
1868 파핑파핑 지뢰찾기 (0) | 2018.09.05 |
3282 0/1 Knapsack (0) | 2018.04.12 |
3260 두 수의 덧셈 (0) | 2018.04.11 |
3304 최장 공통 부분 수열 (0) | 2018.04.11 |