3.3 进制转换(又一版 A+B、数制转换)

一、又一版 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;
}
原创文章 35 获赞 17 访问量 7835

猜你喜欢

转载自blog.csdn.net/dear_jing/article/details/105877972