美文网首页
A1001 A+B Format (20分)()

A1001 A+B Format (20分)()

作者: km15 | 来源:发表于2020-01-17 11:12 被阅读0次

    考察:输出逗号!

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

    相关文章

      网友评论

          本文标题:A1001 A+B Format (20分)()

          本文链接:https://www.haomeiwen.com/subject/qtcqzctx.html