进制转换--算法笔记

进制转换步骤:
将P进制转换为Q进制,需要分为两步

  • 将P进制数转化为十进制数
  • 将十进制转化为Q进制
int y =0,product=1;//p进制x转化为10进制的y
while(x!=0){
	y=y+(x%10)*product;//x%10为了取x的个位数
	x=x/10;
	product=product*p;
}

//十进制y转化为Q进制z
int z[40],num=0;//数组z存放Q的进制数y的每一位,num为位数
do{
	z[num++] = y%Q;//除基取余
	y=y/Q;
}while(y!=0);
//这样数组从高位z[num-1]到低位num[0]就正好是Q进制的z。
//这儿用do while而不用while是因为如果y正好为0,用while会让循环直接跳出,结果出错。

题目:PAT 1022 D进制的A+B (20分)

输入两个非负 10 进制整数 A 和 B (≤2​30​​−1),输出 A+B 的 D (1<D≤10)进制数。

输入格式:

输入在一行中依次给出 3 个整数 A、B 和 D。

输出格式:

输出 A+B 的 D 进制数。

输入样例:

123 456 8

输出样例:

1103

解答:

//一刷代码
#include <iostream>
#include<vector>
#include<algorithm>
#include<string>
using namespace std;

int main() {
	long long int a,b,c;
	int d;
	cin>>a>>b>>d;
	c = a+b;
	int v[100];
	int i = 0;
	if(c==0){
		cout<<"0";
		return 0;
	} 
	
	while(c!=0){//有一个测试点通不过,因为少考虑了c = 0的情况 
		v[i] = c%d;
		c = c/d;
		i++;
	}
	for(int j = i-1;j>=0;j--){
		cout<<v[j];
	}
	return 0;
}
//整理思路后的代码

#include<iostream>
using namespace std;
int main(){
    int a,b,c;
    cin>>a>>b>>c;
    a=a+b;
    int z[40],num=0;//z里面存放c进制数的每一位,num表示位数。
    do{
        z[num++]=a%c;
        a/=c;
    }while(a!=0);
    for(int i = num-1;i>=0;i--)//逆序输出就是结果
        cout<<z[i];
    return 0;
}
发布了98 篇原创文章 · 获赞 2 · 访问量 3703

猜你喜欢

转载自blog.csdn.net/qq_30377869/article/details/105010380
今日推荐