1022 D进制的A+B (20 分)

简介: 1022 D进制的A+B (20 分)

输入两个非负 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<math.h>
using namespace std;
void toD(int S, int D);
int main()
{
    int A, B,D;
    cin >> A >> B>>D;
    int S = A + B;
    toD(S, D);
    return 0;
}
void toD(int S,int D) {
    int maxP=0;
    for (int i = 0; i < 31; i++) {
        if (pow(D, i) <= S && pow(D,i+1)>S) {
            maxP = i;
            break;
        }
    }
    int *a = new int[maxP+1];
    for (int i = 0; i <= maxP; i++)
        a[i] = 0;
    int yu = S;
    for (int i = maxP; i >= 0; i--) {
        if (yu > 0) {
            for (int j = 0; j < D; j++) {
                if ((yu - j * pow(D, i) >= 0 && yu - (j + 1)* pow(D, i) < 0)) {
                    a[i] = j;
                    yu -= j * pow(D, i);
                }
            }
        }
    }
    for (int i = maxP; i >= 0; i--) {
        cout << a[i];
    }
}

网上看到这题有更简单的做法:

 

#include <iostream>
using namespace std;
int main() {
    int a, b, d;
    cin >> a >> b >> d;
    int t = a + b;
    if (t == 0) {
        cout << 0;
        return 0;
    }
    int s[100];
    int i = 0;
    while (t != 0) {
        s[i++] = t % d;
        t = t / d;
    }
    for (int j = i - 1; j >= 0; j--) {
        cout << s[j];
    }
    return 0;
}


不过,这样只能计算D<=10的情况(也就是题目的要求)。


相关文章
进制学习3
进制学习3
53 1
【软考学习1】数据表示——进制转换,R进制转10进制 和 10进制转R进制
【软考学习1】数据表示——进制转换,R进制转10进制 和 10进制转R进制
278 0
【软考学习1】数据表示——进制转换,R进制转10进制 和 10进制转R进制
|
6月前
|
存储 测试技术
1024 科学计数法 (20 分)
1024 科学计数法 (20 分)
|
7月前
进制转换(m 进制 x 转换为 n 进制的数)
进制转换(m 进制 x 转换为 n 进制的数)
|
7月前
|
存储
leetcode:504. 七进制数
leetcode:504. 七进制数
37 0
|
人工智能
进制数转换知识点总结
二进制和十六进制 用0和1表示各种信息 计算机的电路由逻辑门电路组成。一个逻辑门电路可以看成一个开关,每个开关的状态是“开"(高电位)或“关”(低电位),即对应于1或0
164 0
一种基于质数(2、3、5、7、11…)的变进制数,第一位为2进制,第二位为3进制,第三位为5进制,以此类推。请将该变进制数转化为十进制数。
一种基于质数(2、3、5、7、11…)的变进制数,第一位为2进制,第二位为3进制,第三位为5进制,以此类推。请将该变进制数转化为十进制数。
178 0
一种基于质数(2、3、5、7、11…)的变进制数,第一位为2进制,第二位为3进制,第三位为5进制,以此类推。请将该变进制数转化为十进制数。
【c++】关于数值进制以及进制之间转化
【c++】关于数值进制以及进制之间转化
204 0
【c++】关于数值进制以及进制之间转化

热门文章

最新文章