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;
}
有帮助的话可以点个赞,我会很开心的~
分类:
一些算法题解
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?