PAT乙级 D进制的A+B

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

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

输出 A+B 的 D 进制数。
输入样例:

123 456 8

输出样例:

1103

作者: CHEN, Yue
单位: 浙江大学
时间限制: 200 ms
内存限制: 64 MB
代码长度限制: 16 KB

#include <iostream>
#include <deque>

using namespace std;

int main()
{
	int a,b,d;
	cin>>a>>b>>d;
	int sum=a+b;
	int remainder=0,quotient=0;
	deque<int> dq; 
	remainder=sum%d;
	quotient=sum/d;
	do 
	{
		remainder=sum%d;
		dq.push_front(remainder);
		quotient=sum/d;
		sum=quotient; 
	}while(quotient);
 unsigned	int i;
	for(i=0;i<dq.size();i++)
		cout<<dq[i];
	getchar();
	
	return 0;
}

这道题之前做过,但是当时是百度的,这次是我自己做的(骄傲脸)。十进制数转化为D进制数,和十进制数转化为二进制数异曲同工,就是除以D取余。把所得的余数逆序输出,起初我想的是把余数存到一个数组里,但是余数个数不确定,就决定采用STL里的容器。第一次想采用vector容器,但是只能从尾部插入元素,逆序输出会得到负数(?)而且与原数不同(?),所以就想找一个从头部插入元素的容器deque,问题解决了。但是提交之后答案是部分正确,直觉是while()循环有问题,就把while()循环改为了do…while();循环,答案正确!但是我还是不知道是为什么。。。(?)

猜你喜欢

转载自blog.csdn.net/yft1023/article/details/84381165
今日推荐