输入两个非负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 "stack"
using namespace std;
int main()
{
long A, B, C;
long temp=0;
int D;
cin >> A >> B>>D;
while (A < 0 || B < 0)
return 0;
C = A + B; //先求和
stack<long>E;
if (C>0)
{
switch (D)
{
case 2:
while (C > 0)
{
temp = C % 2;
E.push(temp);
C /= 2;
}
break;
case 3:
while (C > 0)
{
temp = C % 3;
E.push(temp);
C /= 3;
}
break;
case 4:
while (C > 0)
{
temp = C % 4;
E.push(temp);
C /= 4;
}
break;
case 5:
while (C > 0)
{
temp = C % 5;
E.push(temp);
C /= 5;
}
break;
case 6:
while (C > 0)
{
temp = C % 6;
E.push(temp);
C /= 6;
}
break;
case 7:
while (C > 0)
{
temp = C % 7;
E.push(temp);
C /= 7;
}
break;
case 8:
while (C > 0)
{
temp = C % 8;
E.push(temp);
C /= 8;
}
break;
case 9:
while (C > 0)
{
temp = C % 9;
E.push(temp);
C /= 9;
}
break;
case 10:
cout << C;
return 0;
default:
break;
}
while (!E.empty())
{
cout << E.top();
E.pop();
}
}
else
cout << 0;
return 0;
}
Aden:用stack堆栈好麻烦,我写的就只这么麻烦。。。
#include <iostream>
using namespace std;
int main()
{
int a,b,c,d,i,n=0;
int s[100];
scanf("%d %d %d",&a,&b,&d);
c = a + b;
while(c!=0)
{
s[n++]=c%d;
c=c/d;
}
for(i=n-1;i>=0;i--)
printf("%d",s[i]);
if(n==0) printf("0");
system("pause");
return 0;
}
#include<iostream>
using namespace std;
void test(int m,int k){
if(m/k==0)cout<<m;
else{
test(m/k,k);
cout<<m%k;}
}
int main(){
int A,B,D;
cin>>A>>B>>D;
int cnt=0;
cnt=A+B;
test(cnt,D);
system("pause");
return 0;
}
Aden:最下面一个用到了递归,一开始我也想用递归,只可惜不会,学习了这个。