PAT 1001 A+B Format (20 point(s))
题目:
我一开始的思路是:
- 用math.h中的
log10
函数来计算位数(不建议这么做,因为会很慢,而且会出一点别的问题); - 用
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
的目的就是:
- 让程序先输出必然会剩下的几个字符
- 然后每隔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))的更多相关文章
- 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 ...
- 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 ...
- 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 ...
- 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 ...
- 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 ...
- 【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 ...
- 1001.A+B Format (20)代码自查(补足版)
1001.A+B Format (20)代码自查(补足版) 谢谢畅畅酱的提醒,发现了代码中的不足,把变量名更改成更合理的名字,并且把注释也换成英文啦! 栋哥提供的代码自查的方式也帮助了我发现很多代码中 ...
- 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 ...
- 关于‘1001.A+B Format (20)’的解题报告
1001.A+B Format(20) 首先要感谢一下指导我github上传问题的小伙伴们,捣腾了一整天我终于摸到了一点门路,真的谢谢你们. 小豪的github 问题描述: Calculate a + ...
随机推荐
- Vue Google浏览器插件 Vue Devtools无法使用的解决办法
1.插件安装不必多说 一定要用Vue.js 开发版 Vue.min.js 在控制面板就不会显示 2.本地调试 用的是file://协议 修改插件允许访问文件网址 打上对勾
- CentOS 7 查看硬盘情况
用命令: lsblk 查看分区和磁盘 df -h 查看整 ...
- C#索引器1 数字作为索引号
5.索引器 数字作为索引号 public class IndexerClass { private string[] name = new string[2]; public string thi ...
- laplace transform 拉普拉斯变换
参考网址: 1. https://en.wikipedia.org/wiki/First-hitting-time_model 2. https://en.wikipedia.org/wiki/Lap ...
- jupyter安装
1. 安装ipython, jupyter pip install ipython pip install jupyter 2.查看是否有配置文件 jupyter notebook --generat ...
- Java 学习输入1234 求和
输入任何整数都能求和 import java.util.Scanner; /** * @author 作者anil E-mail:888@yirose.com * @date 创建时间:2017年3月 ...
- Provider增删改查
package com.fei.provider; import org.apache.ibatis.jdbc.SQL; import com.fei.domain.User; public clas ...
- 【leetcode】Decode Ways
题目如下: 解题思路:这个题目的本质是一个爬楼梯问题,在爬楼梯问题中,每次可以选择走一步或者两步.而本题也是一样的,解码的时候选择解码一个字符或者两个字符,但是加大了一点点难度,要考虑这些情况.1,Z ...
- LeetCode--059--螺旋矩阵 II(python)
效率超级低,但是能过.... class Solution: def generateMatrix(self, n): tR = tC = 0 dR = n-1 dC = n-1 x = [[0 fo ...
- flask入门,Hello World!
flask这个框架简单易用,去年2018的使用份额已经快接近django了.入门首选,没有太多的要求. 接下来,写个Hello World吧 1.新手入门,如果你是在windows下使用的,需要先安装 ...