前言:目前只做了第一题,第二题后面补罢。
第一题:
题目描述(很像#376):
输入一个整数N,在输入N行,每行有一个K(2<=K<=16),还有一个K进制的M(最多只有9位)。要求输出M的十进制。(经过简化,等真题出来再改)
转换进制很简单,如下(照抄#376):比如(10101)2 ,那么它的十进制表示的式子就是 :1X2^4+0X2^3+1X2^2+0X2^1+1X2^0,
根据此思路,我们就可以写出这样的代码(有些思路没有写出,代码里有注释):
#include <bits/stdc++.h>//万能头文件
using namespace std;
int main(){
int n;
cin>>n;
int k;
string m;
for(int i=1;i<=n;i++){
cin>>k>>m;
int t=0;//第几位
int sum=0;//结果
int t2=0;//因为是字符串,要转成数字
int t3=0;//临时打工仔
for(int j=m.size()-1;j>=0;j--){//从后面开始
if((int)(m[j]-'0')>=0&&(int)(m[j]-'0')<=9){//如果是数字
t2=(int)(m[j]-'0');
}
else{//大于十
if(m[j]=='A'){
t2=10;
}
if(m[j]=='B'){
t2=11;
}
if(m[j]=='C'){
t2=12;
}
if(m[j]=='D'){
t2=13;
}
if(m[j]=='E'){
t2=14;
}
if(m[j]=='F'){//最多只到16进制
t2=15;
}
}
t3=pow(k,t);//pow(n,k)=n的k次方,需要cmath头文件
sum+=t2*t3;
t++;
}
cout<<sum;//输出结果
}
}
测试数据完美通过,可是交上去1分没有,也没有其他错误呀?
想想xushuoxin说的话:十年OI一场空,不开long long 见祖宗。
上面说过,最多有9位数字,如果是16进制那就是16的9次方,最大情况就是15X6的9次方,就是15461882265600。而int只能存放2147483647的数据。远远超过了int的最大范围。
所以要开long long!
不AC代码
#include <bits/stdc++.h>//万能头文件
using namespace std;
int main(){
int n;
cin>>n;
int k;
string m;
for(int i=1;i<=n;i++){
cin>>k>>m;
long long t=0;//第几位
long long sum=0;//结果
long long t2=0;//因为是字符串,要转成数字
long long t3=0;//临时打工仔
for(int j=m.size()-1;j>=0;j--){//从后面开始
if((int)(m[j]-'0')>=0&&(int)(m[j]-'0')<=9){//如果是数字
t2=(int)(m[j]-'0');
}
else{//大于十
if(m[j]=='A'){
t2=10;
}
if(m[j]=='B'){
t2=11;
}
if(m[j]=='C'){
t2=12;
}
if(m[j]=='D'){
t2=13;
}
if(m[j]=='E'){
t2=14;
}
if(m[j]=='F'){//最多只到16进制
t2=15;
}
}
t3=pow(k,t);//pow(n,k)=n的k次方,需要cmath头文件
sum+=t2*t3;
t++;
}
cout<<sum;//输出结果
}
}
但是为什么交上去还是0分啊!
哦忘记加endl了
真·完结撒花(不喜勿喷)
#include <bits/stdc++.h>//万能头文件
using namespace std;
int main(){
int n;
cin>>n;
int k;
string m;
for(int i=1;i<=n;i++){
cin>>k>>m;
long long t=0;//第几位
long long sum=0;//结果
long long t2=0;//因为是字符串,要转成数字
long long t3=0;//临时打工仔
for(int j=m.size()-1;j>=0;j--){//从后面开始
if((int)(m[j]-'0')>=0&&(int)(m[j]-'0')<=9){//如果是数字
t2=(int)(m[j]-'0');
}
else{//大于十
if(m[j]=='A'){
t2=10;
}
if(m[j]=='B'){
t2=11;
}
if(m[j]=='C'){
t2=12;
}
if(m[j]=='D'){
t2=13;
}
if(m[j]=='E'){
t2=14;
}
if(m[j]=='F'){//最多只到16进制
t2=15;
}
}
t3=pow(k,t);//pow(n,k)=n的k次方,需要cmath头文件
sum+=t2*t3;
t++;
}
cout<<sum<<endl;//输出结果
}
}
提醒:禁止抄袭(好像网站上还没这题)