PAT 1001. A+B Format 解题
1001. A+B Format (20)
Calculate a + b and output the sum in standard format -- that is, the digits must be separated into groups of three by commas (unless there are less than four digits).
解题思路
将a+b的值先存在sum中,再逐个分解sum的数字,将组成sum的所有数字存到数组中,由于题目给出a和b的范围是-1000000及1000000之间,于是数组只用开到7就行,接着是处理输出格式问题,首先判断sum共有几位数,采用从高位往低位遍历寻找第一个不为0的数,该数即为最高位,然后从此为开始往低位输出,输出的时候判断一下需不需要输出“,”,判断依据是下一位位数是否为3的整数倍,是则输出。
调试过程
问题1:数组越界

我的思路是设置一个数组number来保存sum各位上的数字,经分析sum最多只有7位也就是七个数字,所以我不假思索的写上了int number[7];,这样定义也不是不可以只要接下来从0开始存就可以了,但我又不假思索的从number[1]开始存到了number[7],于是问题就出现了,导致最后一位全错。(其实我事先在DC上编译运行的时候是没问题的,后来提交后才发现了错误,至今没懂为什么自己运行的时候竟然是过得去的。)这个小问题告诉我们,细心非常之重要。
再次划重点:数组下标从0开始
问题2:负号的输出问题

由于第一版代码我把负数的判断放在了最后,所以每输出一个数字就判断一次正负的,最终导致出现了多个负号的情况。于是改进办法就是从一开始就先判断正负,判断完后直接输出负号,再取绝对值进行下面的运算。
问题3:flag忘记初始化

最后一次提交,出现了一个错误,查了帮助提示是数组越界。于是自己看了半天代码,尝试了各种情况后还是没找出是哪一组数据出现了问题,最后经高人指点发现其实就是漏了全为0的情况……这还是一个细节问题。初始化了flag之后就全AC了。

提交记录

后记
虽然作业只是很简单的一道题目,但还是可以从中收获许多经验。这道题带给我的,就是细心的重要性。细节无疑在编程中是不可忽视的部分,也是最容易出错的地方。往往有时过不去就是一个地方的小细节出了错,有时是格式,有时甚至是单词错了,这些问题还好,编译的时候还会提示你,但如果是编译器找不出来的问题那就有点麻烦了。所以说,从现在开始就要养成注意细节的习惯了。
附录(代码)
#include <stdio.h>
#include <math.h>
int main()
{
int a,b,sum,number[8]={0},i,flag=0;
scanf("%d %d",&a,&b);
sum=a+b;
/*处理负号*/
if (sum<0)
{
printf("-");
sum=abs(sum);
}
/*将sum中每个数依次存入数组中*/
for (i=1;i<=7;i++)
{
if (sum!=0)
{
number[i]=sum%10;
sum=sum/10;
}
else break;
}
/*寻找最高位*/
for (i=7;i>0;i--)
{
if (number[i]!=0)
{
flag=i;
break;
}
}
/*依次输出数字*/
for (i=flag;i>0;i--)
{
printf("%d",number[i]);
if ((i>3)&&((i-1)%3==0))
{
printf(",");
}
}
if (flag==0) printf("0"); //处理为0的情况
return 0;
}
PAT 1001. A+B Format 解题的更多相关文章
- pat 1001 A+B Format
题目链接:传送门 题目简述: 1. 给定两个整数值a,b: 2.范围-1000000 <= a, b <= 1000000: 3.按指定格式输出结果 例:-100000 9 输出: -99 ...
- 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 1001. A+B Format(水题)
#include<cstdio> #include<cstring> using namespace std; char s[10]; int main() { int a,b ...
- PAT 1001 A+B Format (20 point(s))
题目: 我一开始的思路是: 用math.h中的log10函数来计算位数(不建议这么做,因为会很慢,而且会出一点别的问题): 用pow函数根据要插入分号的位置来拆分a+b成一个个数字(例如res / p ...
- PAT 1001 A+B 解题报告
PAT 1001 A+B 代码链接:传送门 题目链接:传送门 题目简述: 给定两个值a,b: 范围-1000000 <= a, b <= 1000000: 按指定格式输出a+b的结果,例: ...
- 关于‘1001.A+B Format (20)’的解题报告
1001.A+B Format(20) 首先要感谢一下指导我github上传问题的小伙伴们,捣腾了一整天我终于摸到了一点门路,真的谢谢你们. 小豪的github 问题描述: Calculate a + ...
- "1001. A+B Format (20)" 解题报告
Github : git@github.com:Circlecos/object-oriented.git PDF Of Markdown : "1001. A+B Format (20)& ...
- 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
题目链接:https://pintia.cn/problem-sets/994805342720868352/problems/994805528788582400 1001 A+B Format ( ...
随机推荐
- BZOJ 1345 序列问题 单调栈
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1345 题目大意: 对于一个给定的序列a1,…,an,我们对它进行一个操作reduce( ...
- python第三十四课——2.匿名函数配合容器函数的使用
匿名函数配合容器函数的使用(了解) 1.匿名函数配合列表对象使用 lt=[lambda x:x**2,lambda x:x**3,lambda x:x**4] for i in lt: print(i ...
- python第三十课--异常(with as操作)
演示with...as...操作 path=r'kaifanglist1.txt' with open(path,'r',encoding='utf-8') as fr: print(fr.read( ...
- browerify初步了解
之前在写Signature Request Warnings & eth_sign学习的时候在里的signing examples时了解到browserify工具,可以通过这个例子学习如何使用 ...
- python json格式字符串转换为字典格式
不废话,看代码 #_*_ coding:utf- _*_ import os import json course=open('C:\\Users\\ly199\\Desktop\\list.txt' ...
- Debian 鼠标左右手
环境:debian testing;xfce4桌面 在debian中想把鼠标改为左手操作,在设置中调整鼠标的按钮为左撇子根本没用!网上搜索后发现事实很简单,简单到不知该怎么说. 废话少说,放码过来. ...
- stm32中assert_param的用法说明
stm32中assert_param的用法说明 首先是要知道条件判断语句 这个运算符分成三部分: (条件) ? (条件成立执行部分) :(条件不成立执行部分) 就这么简单 例如:a=(x>y ...
- 20155227《网络对抗》Exp6 信息收集与漏洞扫描
20155227<网络对抗>Exp6 信息收集与漏洞扫描 实践目标 掌握信息搜集的最基础技能与常用工具的使用方法. 基础问题回答 哪些组织负责DNS,IP的管理. 全球根服务器均由美国政府 ...
- 20155234 Exp3 免杀原理与实践
使用msf编码器生成jar包 使用指令:msfvenom -p java/meterpreter/reverse_tcp lhost=192.168.157.141 lport=5234 x> ...
- Windows下的Anaconda+OpenCV的环境配置
Windows下的Anaconda+OpenCV的环境配置