平衡三进制2

Smiling-Weeping / 2023-08-23 / 原文

Smiling & Weeping
 
                  ---- 道理都懂,只是情绪作祟,故事太撩人。
 
题目链接:https://www.matiji.net
题目:三进制计算机2
很好的思路:不似原本三进制0,1,2 而是-1,0,1 这本质上也是三进制,就是将所有原本的2进一,本位-1,就可以保持数值大小不变
注意:这道题卡输入、输出,不能使用cout , cin (cout << endl 也不行),想用的话解除同步(ios::sync_with_stdio(false))
Talk is cheap , show me the code
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int n , num , nums[50];
 4 inline int read(){
 5     int num=0;
 6     char c;
 7     bool flag = false;
 8     while((c=getchar()) == ' ' || c == '\n' || c == '\t');
 9     if(c == '-')
10         flag = true;
11     else
12         num = c-'0';
13     while(isdigit(c=getchar()))
14         num = num*10 + c-'0';
15     return (flag ? -1 : 1)*num;
16 }
17 int main()
18 {
19     scanf("%d",&n);
20     while(n--){
21         bool flag = true;
22         int len = 0;
23         scanf("%d",&num);
24         if(num == 0){printf("0\n"); continue;}
25         if(num<0) num *= -1 , flag = false;
26         while(num){
27             nums[++len] = num%3;
28             num /= 3;
29         }
30         for(int j = 1; j <= len; j++){
31             //if(nums[j] >= 2) len = max(len , j+1);
32             if(nums[j] >= 3){
33                 //if(j == len) len++;
34                 nums[j+1] += 1;
35                 nums[j] %= 3;
36             }
37             if(nums[j] == 2){
38                 nums[j+1] += 1;
39                 nums[j] = -1;
40             }
41         }
42         if(nums[len+1]) len++;
43         if(flag){
44             for(int j = len; j >= 1; j--){
45                 if(nums[j] == -1) printf("-");
46                 else printf("%d",nums[j]);
47                 nums[j] = 0;
48             }
49             printf("\n");
50         }
51         else{
52             for(int j = len; j >= 1; j--){
53                 if(nums[j] == 1) printf("-");
54                 else printf("%d",nums[j]*(-1));
55                 nums[j] = 0;
56             }
57             printf("\n");
58         }
59     }
60     return 0;
61 }

万头攒动火树银花之处不必找我

文章到此结束,我们下次再见