zoukankan      html  css  js  c++  java
  • PAT 1001. A+B Format 解题

    1. GitHub
    2. PDF

    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;
    }
  • 相关阅读:
    shell、cmd、dos和脚本语言杂谈(转)
    windows命令之PING DIR DEL CD TASKLIST (转)
    STM32的操作过程,寄存器配置与调试过程(转载)
    关于MCU的烧录,下载与其他接口的比较(一)
    关于Spring Security 3获取用户信息的问题
    Spring security 获取当前用户
    Spring Security3实现,权限动态获取
    Spring Security教程
    spring security 3 自定义认证,授权示例
    SpringSecurity自定义过滤器
  • 原文地址:https://www.cnblogs.com/ctsyx/p/6357473.html
Copyright © 2011-2022 走看看