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;
}

上一篇下一篇

猜你喜欢

热点阅读