PAT

1001 A+B Format

2020-03-27  本文已影响0人  胖胖的熊管家

题目

输入两个数a, b, 两数大小在区间[-10^6, 10^6]内,输出的数从后往前每三位用“,”隔开。

Sample Input:
-1000000 9
Sample Output:
-999,991

解法

法一:C++
思路:

因为a,b的大小范围已经确定,所以两数相加的和的范围也可以确定。所以用if条件区分开,输出就行。总的来说还是处理数字,把它们的个十百位撸出来,千万十万位再撸出来,etc。

源码+注释:
#include <iostream>
#include <cstdio>
#include <math.h>
using namespace std;

int main() {
    int a, b, c;
    int partA, partB, partC;
    
    cin>>a>>b;
    c = a + b;


    if (abs(c) < 1000) { // 条件1:xxx
        cout<<c<<endl;
    }
    else if( abs(c) < 1000000){ // 条件2:xxx,xxx
        partB = c / 1000; //前3位
        partC = c % 1000; //后3位
        
//        cout<<partB<<","<<abs(partC)<<endl;
        printf("%d,%03d",partB,abs(partC));
    }
    else{ // 条件3:x,xxx,xxx
        partA = c / 1000000;
        c %= 1000000;
        partB = c / 1000;
        partC = c % 1000;
//        cout<<partA<<","<<abs(partB)<<","<<abs(partC)<<endl;
        printf("%d,%03d,%03d",partA,abs(partB),abs(partC));
    }

}

知识点+坑:

scanf 格式化输入
printf 格式化输出

上面这两种包含在 #include <cstdio>
坑:
本来是想用cout输出的,后来发现不是全部正确的。没有考虑到特殊情况,比如:1000 0,输出应该想是1,000,但事实上是1,0。因为

 partC = c % 1000; 

1000 % 1000是0,而不是000.
所以,这时候想让他补足三位输出就需要printf了。

法二:Javascript
思路:

用js就是想把结果c转化为string,然后通过string的方法substr()来实现每三位用逗号隔开。

源码:
function sumFormat(a,b){
    c = a + b
    c > 0 ? symbol = "" : symbol = "-"
    c = Math.abs(c).toString()
    length = c.length
    if(length < 4){
        return symbol+c
    }
    else if(length < 7){
        partC = c.substr(length-3,length)
        partB = c.substr(0,length-3)
        return symbol+partB+","+partC
    }
    else{
        partC = c.substr(length-3,3)
        partB = c.substr(length-6,3)
        partA = c.substr(0,3)
        return symbol+partA+","+partB+","+partC
    }
}

知识点+坑:
  1. substr()

String.substr(start [, length])
用途:截取字符串
参数:开始截取的index(必选)+ 截取的长度(可选)

可选参数不是结束截取的index!!!!

坑:
负数转换的时候没把负号考虑进去。所以后面专门用symbol来存储正负号。




(PS:PAT里不知道如果是js它该怎么传参进去,所以用的是C++。)

上一篇下一篇

猜你喜欢

热点阅读