zoukankan      html  css  js  c++  java
  • 解题思路

    GitHub

    题目及要求

    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).
    Input:Each input file contains one test case. Each case contains a pair of integers a and b where -1000000 <= a, b <= 1000000. The numbers are separated by a space.
    Output:For each test case, you should output the sum of a and b in one line. The sum must be written in the standard format.
    Sample Input
    -1000000 9
    Sample Output
    -999,991

    解题思路

    刚开始看到此题的确头大,只是因为它是英文的,后来仔细阅读了街边题目对照着实例,我理解了题目的意思。我第一反应就是这道题要通过除法和求余把sum分为三个一组,沿着这个思路,我又考虑了几种应该有的情况。

    首先是正负问题,通过abs函数解决,最终输出时再考虑正负。

    其次是范围问题,这应该是这道题的关键,经过计算过后,我把它分为了三个区间,一是小于1000的数可以直接输出,二是大于等于1000小于1000000的数,三是大于等于1000000的数。

    最后是具体的除法和求余过程,第二种情况可以除以1000求前三位,求余1000求后三位,第三种情况除以1000000求第一位,除以1000求余1000求下面三位,求余1000求最后三位。最终我还是忽略了输出中0的显现问题,经过调试得以输出正确结果。

    调试过程

    代码1

    这段代码是第一次打的,试了几个结果,发现结果中0的显现有问题

    #include<stdio.h>
    #include<math.h>
    int main()
    {
    	int a,b,sum,x,y,z;
    	scanf("%d %d",&a,&b);
    	sum=abs(a+b);
    	if(sum<1000)
    	{
    		if(a+b>0||a+b==0)printf("%d",sum);
    			else printf("%d",-sum);
    	}
    	else if(sum>1000000||sum==1000000)
    	{
    		x=sum/1000000;
    		y=sum/1000%1000;
    		z=sum%1000;
    		if(a+b>0||a+b==0)printf("%d,%d,%d",x,y,z);
    		else printf("%d,%d,%d",-x,y,z);
    	}
    	else
    	{
    		x=sum/1000%1000;
    		y=sum%1000;
    		if(a+b>0||a+b==0)printf("%d,%d",x,y);
    		else printf("%d,%d",-x,y);
    	}
    	return(0);
    }
    

    代码2

    这次我首先在格式声明里加一个3,发现没用,经过思考之后又在3之前加0,试了几个数字,发现果然行的通,之后在pat上提交一次全部ac,挺激动的。

    #include<stdio.h>
    #include<math.h>
    int main()
    {
    	int a,b,sum,x,y,z;
    	scanf("%d %d",&a,&b);
    	sum=abs(a+b);
    	if(sum<1000)
    	{
    		if(a+b>0||a+b==0)printf("%d",sum);
    			else printf("%d",-sum);
    	}
    	else if(sum>1000000||sum==1000000)
    	{
    		x=sum/1000000;
    		y=sum/1000%1000;
    		z=sum%1000;
    		if(a+b>0||a+b==0)printf("%d,%03d,%d",x,y,z);
    		else printf("%d,%03d,%03d",-x,y,z);
    	}
    	else
    	{
    		x=sum/1000%1000;
    		y=sum%1000;
    		if(a+b>0||a+b==0)printf("%d,%03d",x,y);
    		else printf("%d,%03d",-x,y);
    	}
    	return(0);
    }
    

    pat提交记录

  • 相关阅读:
    【转】Oracle学习系列
    昏昏昏昏昏昏,怎么变成这样了。:(
    SQLServer 2K 安装重复出现挂起问题解决办法
    ORM iBATIS 学习,没弄清楚。
    MagicLinux让我用我一个方便的方法引导你吧。
    SOA大赛初赛文档已经提交.心中大石掉下.
    继续一下目标。
    ORM已经理解了.
    Spot the Bug Episode 2 中BUG的修改
    MaglicLinux启动加入了BOO.INI搞定.这个方便了.
  • 原文地址:https://www.cnblogs.com/52wu244/p/6360763.html
Copyright © 2011-2022 走看看