题目来源和说明
题目来源于2008年浙江大学计算机及软件工程研究生机试真题。
题目描述
输入两个不超过整型定义的非负10进制整数A和B(<=2^31-1),输出A+B的m (1 < m <10)进制数。
样例
输入
8 1300 48
2 1 7
0
输出
2504
1000
简要分析
这个题目是最普通的进制转换,我们只需要求得两数得和并将其转换为m进制输出即可。
C++ 代码
#include<iostream>
using namespace std;
int ans[50];
int main() {
long long a,b;
int m;
while(scanf("%d",&m)!=EOF) {
if(m==0) break; //当m=0的时候退出
scanf("%lld%lld",&a,&b);
a=a+b;
int size=0;
do { //保证该转换工作至少会被执行一次
ans[size++]=a%m;
a/=m;
}while(a!=0);
/*while(a!=0) { 注意这样写是不对的,因为一旦a等于0
ans[size++]=a%m;
a/=m;
}*/
for(int i=size-1;i>=0;i--) {
printf("%d",ans[i]);
}//输出,注意顺序从高位到低位
printf("\n");
}
return 0;
}
同类题目
- 数制转换
https://www.nowcoder.com/questionTerminal/8ef02ef8571b417d8c311a87861f7a03
C++代码
#include<iostream>
#include<string.h>
using namespace std;
int a,b;
char s[40];
int main() {
while(scanf("%d%s%d",&a,s,&b)!=EOF) {
int len=strlen(s);
int temp=0;
for(int i=0;i<len;i++) {
int x;
if(s[i]>='0' && s[i]<='9') x=s[i]-'0';
else if(s[i]>='a'&&s[i]<='z') x=s[i]-'a'+10;
else x=s[i]-'A'+10;
temp=temp*a+x;
}
int ans[40],size=0;
do{
ans[size++]=(temp%b<10) ? temp%b+'0':temp%b-10+'A';
temp=temp/b;
}while(temp!=0);
for(int i=size-1;i>=0;i--) {
printf("%c",ans[i]);
}
printf("\n");
}
return 0;
}
- 八进制
https://www.nowcoder.com/questionTerminal/eda051c1effc4dffa630bc8507f0c5f7
C++代码
#include<iostream>
using namespace std;
int res[40];
int main() {
int n;
while(scanf("%d",&n)!=EOF) {
int size=0;
do{
res[size++]=n%8;
n=n/8;
}while(n!=0);
for(int i=size-1;i>=0;i--) {
printf("%d",res[i]);
}
printf("\n");
}
return 0;
}
C++代码