【进制转换】HDOJ[1877]又一版 A+B

题目网址:http://acm.hdu.edu.cn/showproblem.php?pid=1877

又一版 A+B

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 18348    Accepted Submission(s): 7205


Problem Description
输入两个不超过整型定义的非负10进制整数A和B(<=2 31-1),输出A+B的m (1 < m <10)进制数。



 

Input
输入格式:测试输入包含若干测试用例。每个测试用例占一行,给出m和A,B的值。
当m为0时输入结束。
 

Output
输出格式:每个测试用例的输出占一行,输出A+B的m进制数。
 

Sample Input
 
  
8 1300 48 2 1 7 0
 

Sample Output
 
  
2504 1000
 

Author
ZJU
 

Source


进制转换的题目也是常考的。

从m进制转换到n进制的一般思路是,先从m进制转换到10进制,再转换到n进制。当然,这个是一般思路,另外的方法也是有的,比如一个二进制与十六进制的转换,可以4位4位的转换,接触到题目再说。

所以,本题就是熟悉从十进制转换到别的进制。核心思路就是不断求余求商,并且将余数保存到int数组里面。注意一些细节,使用do-while循环而不是while循环。

具体参考代码:

#include<iostream>
#include<stdio.h>
#include<string.h>
#include<queue>
using namespace std;

int main(){
	long long A,B;//虽然题目说不超过int范围 但是A+B可能会溢出
	int m;
	scanf("%d",&m);
	while(m!=0){
		scanf("%lld%lld",&A,&B);
		long long res=A+B;
		int ans[50];//保存转换进制后的各个数位值
		int size=0;//size表示个数
		do{
			ans[size++]=res%m;
			res/=m;
		}while(res!=0);//do while循环的原因是  保证res==0时,也可以进行转换,否则就需要特殊判断
		for(int i=size-1;i>=0;i--){
			printf("%d",ans[i]);
		}
		printf("\n");
		scanf("%d",&m);
	}
}

猜你喜欢

转载自blog.csdn.net/qq_33837704/article/details/80347668