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
}
}
知识点+坑:
- substr()
String.substr(start [, length])
用途:截取字符串
参数:开始截取的index(必选)+ 截取的长度(可选)
可选参数不是结束截取的index!!!!
坑:
负数转换的时候没把负号考虑进去。所以后面专门用symbol来存储正负号。
(PS:PAT里不知道如果是js它该怎么传参进去,所以用的是C++。)