题目:

我一开始的思路是:

  1. 用math.h中的log10函数来计算位数(不建议这么做,因为会很慢,而且会出一点别的问题);
  2. pow函数根据要插入分号的位置来拆分a+b成一个个数字(例如res / pow(10, len - 3)来获得千位以前的数字),从左往右依次输出,同时在对应位置输出,

也就是说,我这里的思路是直接用数字来进行处理的,但是这样做其实非常低效而且很容易写错代码,因此我看了下柳婼的代码,换成了这个思路:先将计算结果转换为字符串后进行处理。这样就会简单许多:

#include <iostream>

int main(){
int a, b;
std::cin >> a >> b;
std::string stringNum = std::to_string(a + b);
int len = stringNum.length();
for(int i=0; i<len; i++){
std::cout << stringNum[i];
if(stringNum[i] == '-'){
continue;
};
if((i + 1)%3 == len%3 && i != len-1){
std::cout << ",";
}
}
return 0;
}

我一开始的时候搞不明白为什么判定条件有(i + 1)%3 == len%3,后来想了想,整理成了以下思路:

首先,我们假设计算结果为7位,那么可以知道,len = 7,且len%3结果为1。画成图:

因为我们的下标是从左往右进行计数的,而且从0开始计数,所以需要先通过i+1来变成和计算长度时一样的从1开始计数。

然后,我们先想想看应该怎么输出,如果是从右往左输出的话,那么我们先输出3位,然后输出,,然后再输出3位,再输出一次,,最后因为剩下的字符只有一个,所以输出了这个字符之后就不需要再输出逗号了。

但是计算机输出字符只能够从左往右输出,所以我们先计算出输出完所有的“逗号”之后,最后剩下的字符的数目,所以需要len%3。我们接下来要做的事情就是先输出这几个最后会剩下的字符,然后输出逗号,然后继续往后走3位,每次走完3位就输出一次逗号,直到最终遍历完整个字符串。

因此我们可以明白,其实设置(i + 1)%3 == len%3的目的就是:

  1. 让程序先输出必然会剩下的几个字符
  2. 然后每隔3位让程序输出一次逗号

所以,其实(i + 1)%3 == len%3就是相当于偏置项,让程序能够通过“偏置”来先输出最头几个肯定剩下来的字符。但是这样比较不容易理解,所以我们可以改写成这样:(i + 1)%3 - (len%3)== 0,因为(i+1) % 3必然取0, 1, 2这3个值中的一个,所以如果减去len%3,那么可以确保前len%3个字符输出期间不会输出逗号,且不会干扰到后面的计数。

为了方便理解,在修改代码之后可以变成:

#include <iostream>

int main(){
int a, b;
std::cin >> a >> b;
std::string stringNum = std::to_string(a + b);
int len = stringNum.length();
for(int i=0; i<len; i++){
std::cout << stringNum[i];
if(stringNum[i] == '-'){
continue;
};
if((i + 1)%3 - len%3 == 0 && i != len-1){
std::cout << ",";
}
}
return 0;
}

而且提交之后可以看到,是可以通过的:

PAT 1001 A+B Format (20 point(s))的更多相关文章

  1. PAT 1001 A+B Format (20分) to_string()

    题目 Calculate a+b and output the sum in standard format -- that is, the digits must be separated into ...

  2. PAT (Advanced Level) Practice 1001 A+B Format (20 分) 凌宸1642

    PAT (Advanced Level) Practice 1001 A+B Format (20 分) 凌宸1642 题目描述: Calculate a+b and output the sum i ...

  3. PAT 甲级 1001 A+B Format (20)(20 分)

    1001 A+B Format (20)(20 分) Calculate a + b and output the sum in standard format -- that is, the dig ...

  4. PAT 甲级1001 A+B Format (20)(C++ -思路)

    1001 A+B Format (20)(20 分) Calculate a + b and output the sum in standard format -- that is, the dig ...

  5. PAT甲 1001. A+B Format (20) 2016-09-09 22:47 25人阅读 评论(0) 收藏

    1001. A+B Format (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue Calculate ...

  6. 【PAT】1001. A+B Format (20)

    1001. A+B Format (20) Calculate a + b and output the sum in standard format -- that is, the digits m ...

  7. 1001.A+B Format (20)代码自查(补足版)

    1001.A+B Format (20)代码自查(补足版) 谢谢畅畅酱的提醒,发现了代码中的不足,把变量名更改成更合理的名字,并且把注释也换成英文啦! 栋哥提供的代码自查的方式也帮助了我发现很多代码中 ...

  8. PAT 1001. A+B Format 解题

    GitHub PDF 1001. A+B Format (20) Calculate a + b and output the sum in standard format -- that is, t ...

  9. 关于‘1001.A+B Format (20)’的解题报告

    1001.A+B Format(20) 首先要感谢一下指导我github上传问题的小伙伴们,捣腾了一整天我终于摸到了一点门路,真的谢谢你们. 小豪的github 问题描述: Calculate a + ...

随机推荐

  1. AsyncDisplayKit

    Facebook发布了其iOS UI框架AsyncDisplayKit(ASDK)1.0正式版,这个框架被用于Facebook自家的应用Paper中,能够提高UI的流畅性并缩短响应时间. 下载和使用 ...

  2. mailto - 简单多媒体邮件发送程序

    SYNOPSIS mailto  [-a] [-c] [-s] [recipient name(s)] DESCRIPTION mailto 程序是一个用于发送MIME格式的多媒体邮件(MIME格式是 ...

  3. 自动化运维工具-Ansible基础及Ansible Ad-Hoc

    第58章 Ansible 目录 第58章 Ansible 一.Ansible基础概述 1.1)什么是Ansible 1.2)Ansible可以完成哪些功能呢?1.3)Ansible特点 1.4)Ans ...

  4. 大数据数据库HBase(二)——搭建与JavaAPI

    一.搭建 1.选择一台没有ZK的机器(HBase自带ZK,可能会导致冲突) 2.选择版本2.0.5的HBase 3.解压HBase2.0.5 4.配置HBase的HBASE_HOME和path 5.修 ...

  5. Asc函数与Chr函数

    返回值: Integer    返回字符串中第一个字符的字符代码.    提示: Chr函数可以将一个Ascii码转换为相对应的字符 语法:   Asc(string) string,必须参数,字符串 ...

  6. Intelli IDEA快捷键(配合IdeaVim)(转)

    Intelli IDEA快捷键(配合IdeaVim)(转) Intelli IDEA开发环境,个人总结的一些常用的快捷键. 想要使用vim方式编辑代码,可以使用Intelli IDEA的IdeaVim ...

  7. 046:ORM模型介绍

    ORM模型介绍: 随着项目越来越大,采用写原生SQL的方式在代码中会出现大量的SQL语句,那么问题就出现了: 1.SQL语句重复利用率不高,越复杂的SQL语句条件越多,代码越长.会出现很多相近的SQL ...

  8. 【bzoj4552】【Tjoi2016&Heoi2016】【NOIP2016模拟7.12】排序

    题目 在2016年,佳媛姐姐喜欢上了数字序列.因而他经常研究关于序列的一些奇奇怪怪的问题,现在他在研究一个难题,需要你来帮助他.这个难题是这样子的:给出一个1到n的全排列,现在对这个全排列序列进行m次 ...

  9. [洛谷P2886] 牛继电器Cow Relays

    问题描述 For their physical fitness program, N (2 ≤ N ≤ 1,000,000) cows have decided to run a relay race ...

  10. 七夕-心形表白-简单css代码

    今天你要和谁过? 今天你要怎么过?? 今天去哪里吃??? 公司的三连问,对于一些单身狗有点招架不住啊. 在此送上一个薄礼,来安慰下受伤的心灵... 确定是安慰不是连环打击嘛..... 回答:确定! 来 ...