版权声明:https://blog.csdn.net/huashuimu2003 https://blog.csdn.net/huashuimu2003/article/details/84439379
题目
描述 Description
你到一个部落中心小镇当统计员,每个部落用不同进制数来汇报他们的人数,你要计算出总数,并用10进制数向上汇报。
输入格式 Input Format
第一行:一个整数n( 0<n<100),表示共有n个部落。
下面有n行,每行两个用1个空格隔开的整数:bi ci,表示每个部落用bi(2<=bi<=10 )进制数,记录的人数是ci (不超过5位数)。
输出格式 Output Format
只一个整数sum。表示10进制的总人数。
样例输入 Sample Input
3
3 20
5 10
8 11
样例输出 Sample Output
20
时间限制 Time Limitation
1s
代码
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int or2De(int base, char a[])
{
int length = strlen(a);/* 计算这个数组的长度*/
int i, b=1, sum=0;/*定义三个局部变量,i为数组下标,b=1,实际上可以看成进制的0次方,
每循环一次,进制就平方一次,sum是整个数组通过进制相乘得到的十进制整数,初始为0*/
for (i=length-1; i>=0;i--)
{
if (a[i]>='A')
{
sum = sum + (a[i]-'A'+10)*b;
b = b*base;
}
else
{
sum = sum+(a[i]-'0')*b;
b = b*base;
}
}
return sum;/*函数返回最后的十进制数,即sum的值*/
}
int main()
{
int n;//定义一个进制
int m;//定义一个整型变量,存放部落的个数
int sum;
sum = 0;
char a[500];//定义一个数组存放输入的n进制的部落人数
int r[100];//定义一个存放每个部落的十进制数
cout <<"please input the number of tribes" <<endl;
scanf("%d", &m);
for (int i=0;i<=m-1;i++)
{
cout<<"please input the base and number of"<< " "<<i+1 <<"th"<<" "<<"tribe"<<endl;
scanf("%d %s", &n, &a);
r[i]= or2De(n,a);
}
for (int j=0;j<=m-1;j++)
sum = sum + r[j];
printf ("%d",sum);
return 0;
}