CF 136B Ternary Logic

http://codeforces.com/problemset/problem/136/B

题意 :就是说tor是一个三进制的运算,代表的是两个三进制数的运算,两个三进制数按位逐一相加后对三取余,没有进位,但是如果两个没有相同多的位数的话,短的那个0。而那个样例就是10进制的14和10进制的59进行tor运算,就相当于分别转化成三进制在进行tor运算,a tor b = c,给你a和c,让你求b 。

思路 : 其实也没什么好说的,题懂了,基本上思路也就出来了,我也就是把a c都转化成三进制的,然后用c的三进制减a 的三进制,最后再转化成10进制即可 。

#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std ;
int aa[110],bb[110],cc[110] ;
int tran(int n ,int *s)
{
    int i = 0 ;
    while(n)
    {
        s[i++] = n%3 ;
        n /= 3 ;
    }
    return i ;
}
int main()
{
    int a,c ;
    memset(aa,0,sizeof(aa)) ;
    memset(bb,0,sizeof(bb)) ;
    memset(cc,0,sizeof(cc)) ;
    while(scanf("%d %d",&a,&c)!=EOF)
    {
        int lena = tran(a,aa) ;
        int lenc = tran(c,cc) ;
        int maxx = lena > lenc?lena:lenc ;
        for(int i = 0 ; i < maxx ; i++)
        {
            cc[i] = cc[i] >= aa[i]?cc[i]:cc[i]+3 ;
            bb[i] = cc[i]-aa[i] ;
        }
        int count = 1 ;
        int b = 0 ;
        for(int i = 0 ; i < maxx ; i++)
        {
            b += (count*bb[i]) ;
            count *= 3 ;
        }
      printf("%d
",b) ;
    }
    return 0 ;
}
View Code
原文地址:https://www.cnblogs.com/luyingfeng/p/3417027.html