PAT 甲级 1001

PAT 甲级 1001
参考自:https://blog.csdn.net/richenyunqi/article/details/84981078

题目描述

首先,题目给定了a,b的取值范围,对于输入数据要用空格将输入的a,b隔开,对于输出的结果需要用逗号分开。
题目

总体思路

输出的时候可以采取向前遍历和向后遍历两种方法。

向前遍历

算法设计

对于待输出的int变量转换为能求长度的string变量,并求长度len,如果len%3 = n> 0,输出前n个数字并且按照“,xxx”的格式依次输出。

C++ 代码

#include<bits/stdc++.h>
using namespace std;
int main(){
    int a,b;
    cin>>a>>b;		//读入a,b
    if(a+b<0)		//判断是否为负数
        cout<<"-";		
    string s=to_string(abs(a+b));		//将|a+b|的结果用字符串表示便于遍历
    int i=s.size()%3==0?3:s.size()%3;		//如果长度被3整除则i=3,否则i=长度被3除的到的余数
    cout<<s.substr(0,i);		//从第0位开始的长度为i的字符串,默认时的长度为从开始位置到尾
    for(;i<s.size();i+=3)
        cout<<","<<s.substr(i,3);
    return 0;
}

向后遍历

长度依旧用len表示,n = len%3,如果len>3,先输出3个,继续比较 len-3和n的大小。如果len<3,直接输出n个。
这里选择用向量来实现,从字符串最左边开始每数3个元素储存到向量的一个单元中,直到不足3个,然后倒序输出向量元素。

#include <bits/stdc++.h>
using namespace std;
int main(int argc, char *argv[]){
    int a,b;
    cin>>a>>b;
    if(a+b<0)
        cout<<"-";
    string s=to_string(abs(a+b));
    vector<string>v;		//定义向量,用于储存string的每3位数字
    for(int i=s.size();i>0;i-=3)		//从后向前遍历
        v.push_back(i>=3?s.substr(i-3,3):s.substr(0,i));		//将数字储存到向量的分块中,比如:s=1,234,567,v[0] = 567,v[1] = 234, v[2] = 1
    for(int i=v.size()-1;i>=0;--i)//		倒序将向量块输出
        printf("%s%s",v[i].c_str(),i>0?",":"");
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值