pat考试准备一_两个数字和的标准化输出

今天是开通博客的第一天,也是准备明年pst编程能力的第一天,为了能明年3月份拿到一个不错的成绩,从今天开始更新自己的小白博客,同时将自己的代码同步到Github上管理。
不多说了, 先上题。
这里写图片描述
乍一看,就是一个数字的标准化输出,挺简单的。(到了后面才发现自己想的太单纯。)马上想到的思路是,先对a和b进行相加得到和sum,对sum进行判断,若
sum小于0,输出一个“-”,反之不进行操作,然后将sum进行模1000操作,并存入数组arr中,在进行sum除以1000操作,若商大于1000,在进行一次模1000,除以1000的操作,若商小于1000,将商存入下一个数组的下一个值中,这样就将sum值进行划分完成,接着再将数组逆向输出即可。上代码

#include <iostream>
#include<stdio.h>
using namespace std;

int main()
{
    int a, b ;
    scanf("%d",&a);
    scanf("%d",&b);
    int sum = a+ b;
    int arr[10] , i = 0;
    if(sum < 0){
        cout<<"-";
        sum = sum * (-1);
    }
    for( i = 0; ; i++){
        arr[i] = sum % 1000 ;
        sum = sum / 1000;
        if(sum < 1000){
             arr[i + 1] = sum % 1000 ;
            sum = sum / 1000;
            break;
        }
    }
    for( int j = i + 1 ; j >=0 ;--j){
        printf("%d",arr[j]);
        if( j != 0 ){
             printf(",");
        }
    }
    return 0;
}

在测试后,存在如下问题:
1.输入-1,1后会输出0,0
2.输入999后,会输出1,0
3.输入9999999后,会输出10,0,0
问题存在原因大概有这么两点:1.当sum是0时,会将sum[0]和sum[1]都设置成0
2.若sum是1000时,sum%1000=0,将sum[0]设置成0后,未将其格式化输出,导致输出1,0
综合以上问题以及原因,修改代码如下

#include <iostream>
#include<stdio.h>
using namespace std;

int main()
{
    int a, b ;
    scanf("%d",&a);
    scanf("%d",&b);
    int sum = a+ b;
    int arr[10] , i = 0 ,j , k;
    if(sum < 0){
        printf("-");
        sum = sum * (-1);
    }
    for( i = 0; ; i++){


        arr[i] = sum % 1000 ;
        sum = sum / 1000;


        if(sum < 1000 && sum != 0){
             arr[i + 1] = sum % 1000 ;
            sum = sum / 1000;
            break;
        }else if(sum == 0){
            i = i -1 ;
            break;
        }
    }
     j = i + 1;
     k = j;
if( j == 0){
     printf("%d",arr[j]);
}else{
    for( j ; j >=0 ;--j){
        if(k == j){
            printf("%d",arr[j]);
            printf(",");
        }else{
                if( j != 0 ){
                 printf("%03d",arr[j]);
                 printf(",");
            }else{
                printf("%03d",arr[j]);
            }
        }
    }
}


    return 0;
}

经测试,代码运行通过

好,第一天分享就到这里,
个人github托管地址:https://github.com/GuanyuLi

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值