PAT甲级——1001 A+B format 千位分隔符

题目描述:输入a和b,要求输出ab之和,要用xx,xxx,xxx格式输出

分析

  • 三位一个逗号这种格式就是所谓的千位分隔符
  • 千位分隔符的特点在于:对于每一个逗号,其后面的数字个数都是3的整数倍
  • 算法有很多,核心在于千位分隔符的特点

算法1

  • 将要ab之和sum的绝对值倒序存储在一个char数组中,(数字的低位会放在数组的低位),最后倒序输出char数组时适时输出逗号即可
  • 输出逗号的时机:数组下标是3的整数倍且不为零时(翻转后数组下标具有了意义:表示待输出的数字个数
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;

const int N =10;

int main()
{
    int a,b,sum;
    cin>>a>>b;
    sum=a+b;
    if(sum<0)
    {
        cout << "-";
        sum*=-1;
    }
    
    //将sum倒序存入数组q
    char q[N];
    int idx=0;
    do
    {
        q[idx++]=sum%10+'0';
        sum/=10;
    }while(sum);
    
    //倒序遍历数组q
    for (int i = idx-1; i >=0; i -- )
    {
        cout << q[i];
        if(i&&i%3==0)
            cout << ",";
    }
    
    return 0;
}


算法2柳诺

思路:数组长度为len,数字后面要加逗号的下标为i。
注意到 (len-1-i)%3 == 0->(len-(i+1))%3==0->(i + 1) % 3 == len % 3;

#include <iostream>
using namespace std;
int main() {
    int a, b;
    cin >> a >> b;
    string s = to_string(a + b);
    int len = s.length();
    for (int i = 0; i < len; i++) {
        cout << s[i];
        if (s[i] == '-') continue;
        if ((i + 1) % 3 == len % 3 && i != len - 1) cout << ",";
    }
    return 0;
}
posted @   穿过雾的阴霾  阅读(118)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示