题目描述
给一个长度不超过 18 的 01 串,你需要输出这个串在 2, 3, 4, 5, 6, 7, 8, 9, 10 进制表示下的数值在 10 进制下的和。
输入
第一行是一个正整数 T (T<=100000),表示测试数据的组数,
接下来 T 行,每行包含一个长度不超过 18 的 01 串,保证没有前导零。
输出
对于每组测试数据,输出一个整数。
样例输入
2 10 101
样例输出
54 393
错误代码:
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <queue>
#include<sstream>
using namespace std;
typedef long long ll;
queue<ll> q;
void sum(int a)
{
for(int i=2;i<=10;i++)
{
ll temp=0;
ll x=a;
ll t=1;
while(x)
{
if(1&x)
temp+=t;
t*=i;
x/=10;
}
q.push(temp);
}
}
int main()
{
ll a,ans=0;
int n;
cin>>n;
while(n--)
{
cin>>a;
sum(a);
while(!q.empty())
{
ans+=q.front();
q.pop();
}
cout<<ans<<endl;
ans=0;
}
return 0;
}
AC代码:
#include <iostream>
#include <algorithm>
#include <cstdio>
#include<string.h>
#include <queue>
#include<sstream>
using namespace std;
typedef long long ll;
queue<ll> q;
void sum(ll a)
{
ll i;
for(i=2;i<=10;i++)
{
ll temp=0;
ll x=a;
ll t=1;
while(x)
{
if(1&x)
temp+=t;
t*=i;
x/=10;
}
q.push(temp);
}
}
int main()
{
ll n,a;
ll ans=0;
cin>>n;
while(n--)
{
cin>>a;
sum(a);
while(!q.empty())
{
ans+=q.front();
q.pop();
}
cout<<ans<<endl;
ans=0;
}
return 0;
}
用 long long !!!!!!!