您的位置:首页 > 编程语言

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

2015-12-16 11:03 387 查看
今天是开通博客的第一天,也是准备明年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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  github