题目来源和说明

题目来源于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;
}

同类题目

  1. 数制转换

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;
}

  1. 八进制

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++代码