一、又一版 A+B
1、题目和要求
时间限制:1s,内存限制:32MB,特殊判题:否
2、总结
A、B不超过整型定义
,可以用int
存储,但相加后可能会溢出,所以结果使用long
存储(scanf、printf("%lld",result)
)。
3、代码
#include <string>
#include <iostream>
using namespace std;
#define N 31
int main()
{
int m_result[N]; //存储进制转换后的数字
long d_result; //存储十进制数字
int a,b;
int m;
cin>>m;
while(m!=0)
{
int i=0;
cin>>a>>b;
d_result = a+b;
while(d_result!=0)
{
m_result[i++]=d_result%m;
d_result = d_result/m;
}
for(int j=i-1; j>=0; j--)
{
cout<<m_result[j];
}
cout<<endl;
cin>>m;
}
return 0;
}
二、数制转换
1、题目和要求
时间限制:1s,内存限制:32MB,特殊判题:否
2、总结
1)使用cin.get()!=EOF
实现循环输入,使用cin.get();
接收多余的回车,不然会多一次循环。
2)权重的另一种表示方式:int c=1
,c为各个数位的权重,初始化为1,之后每位权重都是前一位权重的a倍。
3)参考:
当字符为小写字母时,计算其代表的数字:x=input[i]-'0'+10
将数字转换为字符:output[i++] = (x<10) ? x+'0' : x-10+'A'
3、思路
数制转换的思路:先转为10进制,再从10进制转为其他进制。
4、代码
#include <math.h>
#include <string>
#include <iostream>
using namespace std;
string input;
int a2decimal(int a)
{
int i=0,result=0;
while(input[i]!='\0')
{
int zhi = input.length()-i-1;
if(input[i]>='a'&&input[i]<='f')
{
int value = input[i]-87;
result+=value*pow(a,zhi);
}
else if(input[i]>='A'&&input[i]<='F')
{
int value = input[i]-55;
result+=value*pow(a,zhi);
}
else
{
int value = input[i]-48;
result+=value*pow(a,zhi);
}
i++;
}
return result;
}
void decimal2b(int b,int result)
{
string output;
int i=0,t;
do
{
t=result%b;
result/=b;
if(t>9)
{
output[i++]=t+55;
}
else
{
output[i++]=t+48;
}
}
while(result!=0);
for(int j=i-1; j>=0; j--)
{
cout<<output[j];
}
cout<<endl;
}
int main()
{
int a,b;
do{
cin>>a>>input>>b;
cin.get();
decimal2b(b, a2decimal(a));
}while(cin.get()!=EOF);
return 0;
}