1 solutions

  • 0
    @ 2025-11-5 17:29:01

    C :

    #include<stdio.h>
    #include<math.h>
    void fun(int n)
    {
    	int i;
    	if(n == 3)
    	printf("2+2(0)");
    	else if(n == 2)
    	printf("2");
    	else if(n == 1)
    	printf("2(0)");
    	else
    	{
    		printf("2(");
    		for(i = 14;i>=0;i--)
    		if((int)pow(2,i)<=n)
    		{
    			fun(i); 
    			break;
    		}
    		printf(")");
    		if(n-(int)pow(2,i))
    		{
    			printf("+");
    			fun(n-(int)pow(2,i));
    		}
    	}
    }
    int main()
    {
    	int t,n;
    	scanf("%d",&t);
    	while(t--)
    	{
    		scanf("%d",&n);
    		fun(n);
    		printf("\n");
    	}
    	return 0;
    }
    

    C++ :

    #include<iostream>
    #include<cstdio>
    using namespace std;
    
    void my_print(int n)
    {
    	int flag = 0;	// 标记 
    	// 1 <= n <= 20000
    	// 2^15次方足够存下所用数字的大小 
    	for(int i = 15; i >= 0; i--)
    	{
    		// 利用位运算方便判断2的次幂数 
    		if(n & (1<<i)) {
    			// 大于2的话需要继续递归 
    			if(flag) cout << "+";
    			switch(i)
    			{
    				case 0: cout << "2(0)"; break;
    				case 1: cout << "2"; break;
    				case 2: cout << "2(2)"; break;
    				default: 
    					cout << "2(";
    					my_print(i);
    					cout << ")";
    					break;
    			}
    			flag = 1;
    		} 
    	}
    	
    }
    
    int main()
    {
    	
    	int M;
    	cin >> M;
    	while(M--) {
    		
    		int n;	// 数字n
    		cin >> n; 
    	
    		my_print(n);
    		
    		cout << endl;
    	
    	} 
    	
    	return 0;
    }
    
    • 1

    Information

    ID
    18475
    Time
    1000ms
    Memory
    128MiB
    Difficulty
    (None)
    Tags
    (None)
    # Submissions
    0
    Accepted
    0
    Uploaded By