首页 > 试题广场 >

D进制的A+B (20)

[编程题]D进制的A+B (20)
  • 热度指数:20366 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
输入两个非负10进制整数A和B(<=230-1),输出A+B的D (1 < D <= 10)进制数。

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


输出描述:
输出A+B的D进制数。
示例1

输入

123 456 8

输出

1103
#include<iostream>
#include<stack>
using namespace std;
int main()
{
	int a, b, c, d;
	stack<int> si;
	cin >> a >> b >> d;
	c = a + b;
	while (c)
	{
		si.push(c%d);
		c /= d;
	}
	while (!si.empty())
	{
		cout << si.top();
		si.pop();
	}
	return 0;
}

发表于 2016-02-19 15:46:07 回复(3)

#include<iostream>
#include<string.h>
 
using namespace std;
//PAT乙级真题D进制的A+B (20)
 
voidDradixTransfrom(longlongsum,intD)
{
    if(sum/D==0)
        cout<<sum;
    else{
        DradixTransfrom(sum/D,D);
        cout<<sum%D;
    }
 
}
intmain()
{
    longlongA,B;
    intD;
    cin>>A>>B>>D;
    DradixTransfrom(A+B,D);
    return0;
}

发表于 2017-01-15 16:59:16 回复(0)
#include<iostream>
using namespace std;
void dt(int num,int N){
    if(num/N)dt(num/N,N);
    cout<<num%N;
}
int main(){
    int A,B,D;
    cin>>A>>B>>D;
    dt(A+B,D); 
    return 0;
}
应该最短了吧。。。
发表于 2019-07-25 09:56:38 回复(2)

python 4行解法:

def baseN(num, b):
    return ((num == 0) and "0") or (baseN(num // b, b).lstrip("0") + "0123456789abcdefghijklmnopqrstuvwxyz"[num % b])

a,b,c=map(int,input().split())
print(baseN(a+b,c))
发表于 2017-10-09 11:09:08 回复(0)
#include<stdio.h>
int main (){//the shorter,the better.
    int a,b,d,s[64];
    for(;~scanf("%d%d%d",&a,&b,&d);){
        for(a+=b,b=0;a!=0;s[b++]=a%d,a/=d);
        for(!b?(*s=0):--b;b>=0;printf(b?"%d":"%d\n",s[b]),--b);
    }
}

发表于 2018-01-30 17:31:19 回复(3)
//输入已经能保证不越界,直接调用类库的方法吧
import java.util.Scanner;
 
/**
 * @ClassName Main
 * @Description TODO
 * @Author Wlison
 * @Date 2020/3/11 9:38
 * @Version 1.0
 **/
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
            int a = sc.nextInt();
            int b = sc.nextInt();
            int d = sc.nextInt();
            System.out.println(Integer.toString(a+b,d));
        }
    }
}

编辑于 2020-03-11 10:08:31 回复(0)
import java.math.BigInteger;
import java.util.Scanner;
public class Main{
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		BigInteger A = new BigInteger(sc.nextInt()+"");
		BigInteger B = new BigInteger(sc.nextInt()+"");
		BigInteger D =  new BigInteger(sc.nextInt()+"");
		A = A.add(B);
		StringBuilder r = new StringBuilder();
		while(A.divide(D) != BigInteger.ZERO){
			r.append(A.remainder(D));
			A = A.divide(D);
		}
		r.append(A.remainder(D));
		r = r.reverse();
		System.out.println(r.toString());
	}

}


发表于 2017-08-16 20:01:11 回复(0)
//写一个比较全的进制转换函数
#include <stdio.h>

int buf[40];


//m进制数n转成十进制 
int transform1(int n,int m)
{
	int i =0;
	
	int t = 1; 
	
	int ans = 0;
		
	while(n != 0)
	{
		ans += (n%10)*t;
		n /= 10;		
		t *= m;
	}
	
	return ans;
}

//十进制数n转换成m进制 
void transform2(int n,int m)
{
	int i = 0;
	int j;
	
	if(n == 0)
	{
		printf("%d",0);
	}
		
	while(n != 0)
	{
		buf[i++] = n%m;
		n /= m;		
	}
	
	for(j=i-1;j>=0;j--)
	{
		printf("%d",buf[j]);
	}
	printf("\n");
} 


//任何进制转化为m进制 ,思路:先转十进制,再转m进制 
void transform(int n,int m)
{
	int tmp;
	
	tmp = transform1(n,m);
	
	transform2(tmp,m);
}

int main()
{
    int a,b,c;
    while(~scanf("%d %d %d",&a,&b,&c))
    {
	    transform2(a+b,c); 
	}

    return 0;
} 

编辑于 2017-03-12 00:36:58 回复(0)
pat官网的测试点3是a加b的和为0的情况
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>

using namespace std;

vector<long long>arr;

int main(){
	long long a,b;
	int d;
	cin>>a>>b>>d;
	long long c=a+b;
	if(c==0) 
		arr.push_back(c);
	else {
		while(c!=0){
		arr.push_back(c%d);
		c/=d;
		}
	} 
	for(int i=arr.size()-1;i>=0;i--){
		cout<<arr[i];
	}
	return 0;
}

发表于 2020-02-16 21:38:03 回复(0)
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		Scanner sc=new Scanner(System.in);
		int a=sc.nextInt();
		int b=sc.nextInt();
		int d=sc.nextInt();
		int c=a+b;
		String str="";
		while(c>0){
			int temp=c%d;
			str=temp+str;
			c=c/d;
		}
		System.out.print(str);

	}

}

发表于 2015-09-17 18:41:18 回复(1)
#include <iostream>

using namespace std;

int main()
{
    long A,B,C;
    long D;
    long x;
    long a[100];
    int i=0;
    cin>>A>>B;
    C=A+B;
    cin>>D;
    while(C/D!=0)
    {
        x=C%D;
        a[i]=x;
        i++;
        C/=D;
    }
    a[i]=C;
    for(;i>=0;i--)
    {
        cout<<a[i];
    }
}

发表于 2019-07-13 16:16:08 回复(0)
#include<iostream>
#include<vector>
using namespace std;
int main(){
    int a, b, d;
    cin >> a >> b >> d;
    int m = a + b;
    vector<int> v1;
    while (m){
        v1.push_back(m%d);
        m /= d;
    }
    for (int i = v1.size() - 1; i >= 0; i--)
        cout << v1[i];
    cout << endl;
    system("pause");
    return 0;
}

发表于 2019-04-27 23:13:43 回复(0)
#include<stdio.h>
#include<math.h>

int main(){
    int x[100];
    int num = 0, a, b, type, sum, i;
    scanf("%d%d%d", &a, &b, &type);
    sum = a + b;
    do{
        x[num++] = sum % type;
        sum /= type;
    }while(sum != 0);
    for(i = num - 1; i >= 0; i-- ) printf("%d", x[i]);
    return 0;
}
发表于 2018-11-02 15:20:44 回复(1)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
    long long int m,n,s;
    int b,i=0,j;
    char no[100000];
    scanf("%lld %lld %d",&m,&n,&b);
    s=m+n;
        while(s)
        {
            no[i]=(s%b)+'0';
            s=s/b;
            i++;
        }
        for(j=i-1;j>=0;j--)
            printf("%c",no[j]);
    return 0;
}

发表于 2018-05-15 13:42:32 回复(0)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
#define FOR(i,n) for(i=0;i<n;i++)
using namespace std;
char stack[100] = { 0 };
int top = -1;
void getStr(int, int);
inline void push(int);

int main()
{
    int A, B, D, sum, apple = 0, length = 0;
    cin >> A >> B >> D;
    sum = A + B;
    getStr(sum, D);
    for (int i = top; i >= 0; i--)
    {
        cout << stack[i];
    }
    return 0;
}

void getStr(int sum, int D)
{
    int remainder, quotient;
    quotient = sum / D;
    remainder = sum % D;
    if (!quotient)
    {
        push(remainder);
        return;
    }
    while (quotient)
    {
        push(remainder);
        remainder = quotient % D;
        quotient /= D;
    }
    push(remainder);
    return;
}

inline void push(int item)
{

    if (item < 10)
    {
        stack[++top] = '0' + item;
    }
    else
        stack[++top] = 'A' + item - 10;
}
发表于 2018-04-21 21:50:13 回复(0)
package test;

import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
import java.util.Scanner;

/**
 * @author lanxuewei
 * 输入两个非负10进制整数A和B(<=230 -1),输出A+B的D (1 < D <= 10)进制数。 
 * 输入描述:
 * 输入在一行中依次给出3个整数A、B和D。
 * 输出描述:
 * 输出A+B的D进制数。
 * 示例1
 * 输入
 * 123 456 8
 * 输出
 * 1103
 * */
public class AAndB {
	
	//十进制数n转化为m进制
	public List<Integer> transform1(int n, int m){
		List<Integer> list = new ArrayList<Integer>();
		
		if(n == 0){
			list.add(0);
		}
		while(n != 0){
			list.add(n%m);
			n /= m;
		}
		return list;
	}
	
	//逆序输出
	public void invertedSequence(List<Integer> list){	
		ListIterator<Integer> li = null;							//获得LIstIterator对象
		for(li = list.listIterator(); li.hasNext(); li.next()){		//将游标定位到列表结尾
			//不执行语句,循环只是让游标移动											
		}
		
		for(; li.hasPrevious(); ){
			System.out.print(li.previous());
		}
	}
	
	public static void main(String[] args) {
		//输入A B D
		Scanner in = new Scanner(System.in);
		int A = in.nextInt();
		int B = in.nextInt();
		int D = in.nextInt();
		int result = A + B;
		
		AAndB test = new AAndB();
		//调用进制转化以及输出函数
		test.invertedSequence(test.transform1(result, D));
	}

}


发表于 2017-07-26 13:09:12 回复(0)
#include<iostream>
#include<cstring>
using namespace std;
void turn(int &res,int d){
    int temp[32];
    memset(temp,-1,sizeof(temp));
    int i=0;
    while(res!=0){
        temp[i]=res%d;
        res=res/d;
        i++;
    }
    for(int j=31;j>=0;j--){
        if(temp[j]!=-1){
            cout<<temp[j];
        }
    }
    cout<<endl;
}
int main(){
    int A,B,D,res;
    cin >>A>>B>>D;
    res=A+B;
    turn(res,D);
    return 0;
}

发表于 2017-04-11 13:14:41 回复(0)
import java.util.Scanner;

public class Question12 {

public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int A =scan.nextInt();
int B =scan.nextInt();
int radix = scan.nextInt();
System.out.println(Integer.toString(A+B, radix));

}

}

发表于 2017-03-26 14:06:48 回复(0)
很简单的题一开始还以为有十六进制,用递归就行了,dev真心烂,连to_string都用不了
#include <iostream>
using namespace std;
string intTochar="0123456789ABCDEF";
int jinzhi;
string trans(int sum);
int main(){
int a,b;
cin>>a>>b>>jinzhi;
string chg=trans(a+b);
cout<<chg<<endl;
return 0;

string trans(int sum){
if(sum==0) return "";
int yushu=sum%jinzhi;
char yushu1=intTochar[yushu];
sum/=jinzhi;
return trans(sum)+=yushu1;
}
发表于 2017-02-23 20:41:09 回复(0)
a, b, D =raw_input().split()
ans = []
s = ''
a = int(a); b = int(b); D = int(D)
SUM = a + b
if SUM == 0:
    print(0)
while SUM != 0:
    ans.append(SUM % D)
    SUM //= D
for i in range(len(ans)):
    #print(ans.pop(), end='')
    s += str(ans.pop())
print int(s)

发表于 2016-12-21 21:12:51 回复(0)