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

题目链接:

https://pintia.cn/problem-sets/994805260223102976/problems/994805299301433344

我的思想:

先把每个输入的数转换成相应的进制,然后相加,并且判断进位,(太麻烦了)

算法笔记的思路是:先把两个数相加,然后转换进制

未AC代码:

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <string>
#include <math.h>
#include <vector>
using namespace std;

const int maxn=1000010;
int a[maxn];

int main(){
    long long int num_1,num_2;
    int base;
    scanf("%lld%lld%d",&num_1,&num_2,&base);
    long long int sum=num_1+num_2;
    int i=0;
    while(sum){
        a[i++]=sum%base;
        sum/=base;
    }
    for(int j=i-1;j>=0;j--)
        printf("%d",a[j]);
    printf("\n");
}

AC代码:

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <string>
#include <math.h>
#include <vector>
using namespace std;

const int maxn=31;//最多31位,所以最大值位31
int a[maxn];

int main(){
    long long int num_1,num_2;
    int base;
    scanf("%lld%lld%d",&num_1,&num_2,&base);
    long long int sum=num_1+num_2;
    int i=0;
    do{
        a[i++]=sum%base;
        sum/=base;
    }while(sum!=0);
    for(int j=i-1;j>=0;j--)
        printf("%d",a[j]);
    printf("\n");
}

两者差距是一个用了while循环,取特殊情况sum=0,则无法处理(自我感觉)

一个用了do-while循环

猜你喜欢

转载自blog.csdn.net/qq_41755143/article/details/86564187