题目信息:
输入两个非负10进制整数A和B(<=230-1),输出A+B的D (1 < D <= 10)进制数。
输入格式:
输入在一行中依次给出3个整数A、B和D。
输出格式:
输出A+B的D进制数。
输入样例:123 456 8输出样例:
1103我的代码:
#include <iostream>
#include <algorithm>
#include <iomanip>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <cctype>
using namespace std;
int A,B,D;
void solve()
{
int sum=0;
sum=A+B;
char num[30]={0};
int i=0;
if(sum==0)
{
cout<<'0'<<endl;
return;
}
while(sum)
{
num[i]=sum%D+'0';
sum=sum/D;
i++;
}
for(;i;i--)
{
cout<<num[i-1]-'0';
}
cout<<endl;
}
int main()
{
cin>>A>>B>>D;
solve();
system("pause");
return 0;
}
网上的示例代码:
#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <cctype>
#include <stack>
using namespace std;
long long A, B;
int D;
void solve()
{
long long C = A + B;
if(C == 0){
cout << "0" << endl;
return;
}
stack<int> s;
for(; C; C /= D){
s.push(C % D);
}
//首位为0的情况
if(s.top() == 0)
s.pop();
while(!s.empty()){
cout << s.top();
s.pop();
}
cout << endl;
}
int main()
{
cin >> A >> B >> D;
solve();
return 0;
}
分析:这题主要是了解不同进制之间的转换方法,不断地除以进制D,获取余数,最后将余数从后到前输出,这就是相应结果。
我的转换方法没有考虑进制这样求解后首位是01的情况,网上示例利用堆栈满足这一功能,同时判断了栈顶元素是否为
0。