列表

详情


NC25657. 进制

描述

给一个长度不超过 18 的 01 串,你需要输出这个串在 2, 3, 4, 5, 6, 7, 8, 9, 10 进制表示下的数值在 10 进制下的和。

输入描述

第一行是一个正整数 T (T<=100000),表示测试数据的组数,

接下来 T 行,每行包含一个长度不超过 18 的 01 串,保证没有前导零。

输出描述

对于每组测试数据,输出一个整数。

示例1

输入:

2
10
101

输出:

54
393

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C 解法, 执行用时: 64ms, 内存消耗: 3284K, 提交时间: 2023-04-16 22:43:33

#include <stdio.h>
int main()
{int n;
scanf("%d",&n);
while(n--)
{long long k,s=0;
scanf("%lld",&k);
for(int i=2;i<=10;i++)
{long long f=1,b=k;
while(b)
{s=s+(b%10)*f;
f=f*i;
b/=10;}
}
printf("%lld\n",s);}
return 0;}

C++14(g++5.4) 解法, 执行用时: 404ms, 内存消耗: 2140K, 提交时间: 2019-05-14 20:29:31

#include<bits/stdc++.h>
#include<cstring>
using namespace std;
int main(){
	int t;
	cin>>t;
	while(t--)
	{
	char s[20];
	cin>>s;
	long long k=0,m;
	for(int i=2;i<=10;i++)
	k=strtol(s,NULL,i)+k;
	cout<<k<<endl;
	}
}

C++ 解法, 执行用时: 230ms, 内存消耗: 2216K, 提交时间: 2021-10-12 23:24:26

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int t;
	cin>>t;
	while(t--)
	{
		char s[20];
		cin>>s;
		long long k=0,m;
		for(int i=2;i<=10;i++)
		k=strtol(s,NULL,i)+k;
		cout<<k<<endl;
	}
 } 

Python3 解法, 执行用时: 960ms, 内存消耗: 6448K, 提交时间: 2023-01-18 15:31:37

T=int(input())
for t in range(T):
    l=input()
    r=0
    for i in range(2,11):
        r+=int(l,i)
    print(r)

上一题