题目:
输入两个非负 10 进制整数 A 和 B (≤230−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();循环,答案正确!但是我还是不知道是为什么。。。(?)