A1001 A+B Format (20分)()
2020-01-17 本文已影响0人
km15
考察:输出逗号!
learn && wrong;
1、这只有10的6次,不需要用字符数组来处理,单独数字就行了
2、按格式输出即可!我想的太难了!技巧:看分值能判断难度
3、do_while这招同样适合负数,但就是要先输出负号,并且把sum该成正数,不然-999 991,余一次就是-1,-9,-9
同时注意先do,不然0读不进来,边界值,或者加一个if判断0,然后ans[num++] = 0;
4、一直以为余10而已,但是余上一千,一万都是有作用的
(1)在printf中 ,%3d表示输出3位整数,不满3位的高位补空格;而%03d表示输出3位整数,不满3位高位补0,所以有以下写法
(2)余上1000000(6个0,其实是去掉最高位!)即:余10得最小位,除10去掉最小位,余上最大,去掉最高位,除最大100..0,得最高位,两者相反->就是两者相反。余最高,最低,作用相反,除最高最低,作用相反!
if (sum >= 1000000) printf("03%d,%03d,%03d", sum / 1000000, sum % 1000000 / 1000, sum % 1000);
else if (sum >= 1000) printf("%d,%03d", sum / 1000;sum % 1000);
else printf("%d", sum);
/*
编程思想:
1、数字太大了,只能以两个字符数组处理吗
2、转为数字也不行,只能怎么做呢,
如果s1[i]为负,转为正来做!
新的思想:
1、两个数相加,存在一个int型中
2、取余的方式,取出每一位到数组中去
3、倒序输出,每三个一组逗号,如果小于四个,则不用,必然会出现这个边界值
4、符号如何处理,如果小于0,先输出一下负号,那取余还成立吗,还是成立的
*/
#include <iostream>
using namespace std;
int ans[15];
int main()
{
int sum;
int a, b;
cin >> a >> b;
sum = a + b;
int num = 0;
if (sum < 0) {
sum = -sum;
cout << "-"; //如果负数,先输出负号
}
do { //注意先do,不然0读不进来,边界值
ans[num++] = sum % 10;
sum /= 10;
} while (sum != 0);
for (int i = num - 1;i >= 0;--i) {
cout << ans[i];
if (i % 3 == 0 && i != 0) cout << ","; //不等于0,最后一个不用输出
}
return 0;
}