2046 - 炫酷的二进制算法

     聪明的大家都知道,计算机是一个炫酷的二进制世界,二进制是一种神奇的进制,它可以用来表示很多东西并且应用广泛。现在相信大家对十进制的加法已经很熟悉了,再让大家做这种无聊的东西就浪费时间了,所以现在要考验大家的是炫酷的二进制加法功力了;现在有若干个十进制数相加,但是我并不会将这些数告诉你,我也不会将这些数的二进制告诉给你,唯一告诉你的是每一位中总共有多少个数在这一位有1出现,这是一个艰巨的任务?不!大家快去解决它,求出这些数的总和吧。

题目输入

第一行为一个数字T,代表有T组数据,接下来每组数据的第一行有一个n(n <= 20),第二行有n个数a_i(0 <= a_i <= 10),代表二进制第i位总共有a_i(0 <= i <= n-1)个1出现。

题目输出

根据给出的这些信息,输出这些数相加的总和(本题输出范围在32位整数内),每组测试数据输出一行。

输入/输出样例

题目输入

2
2
2 1
3
1 1 1

题目输出

4
7

C语言解答

#include<stdio.h>
#include<math.h>
main()
{
	int n,i,sum,m,p;
	scanf("%d",&n);
	while(n--)
	{
		scanf("%d",&m);
		for(i=0,sum=0;i<m;i++)
		{
		scanf("%d",&p);
		sum+=pow(2,i)*p;
		}
		printf("%d\n",sum);
	}
	
}

C++解答

#include <cstdio> 
#include <cstring> 
#include <algorithm> 
using namespace std; 
const int V = 30; 
int T, n, num; 
int main() { 
    int i, j; 
    scanf("%d", &T); 
    while(T--) { 
        scanf("%d", &n); 
        int ans = 0; 
        for(i = 0; i < n; ++i) { 
            scanf("%d", &num); 
            ans += (1 << i) * num; 
        } 
        printf("%d\n", ans); 
    } 
} 
时间限制 1 秒
内存限制 128 MB
讨论 统计
上一题 下一题