小言_互联网的博客

PAT真题(C语言)——1001:A+B Format

326人阅读  评论(0)

今天已经是九月26日了,突然心血来潮想去考十二月的PAT,但目前的代码水平还刚到幼儿园水平,就用这个博客记录一下刷题的心得吧。
今天是第一题。题目如下:

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 Specification: Each input file contains one test case. Each case contains a pair of integers a and b where −10^6 ​​ ≤ a, b ≤ 10 ^​6 ​​ .
The numbers are separated by a space.

Output Specification: For each test case, you should output the sum ofa and b in one line. The sum must be written in the standard format.
Sample Input:
-1000000^9
Sample Output:
-999,991

思路:这道题属于基础题,难度不高,但可以考虑怎么用更加高效的方法实现,目前想到的是很基础的方法,即将两数相加以后,将结果的每一位分步存进一个数组中,在按原本的顺序打印出来,并在合适的位置加上逗号以及正负号。

这道题目首先一个问题就是,判断的过程肯定得是从低位开始,这是因为我们不知道这个数究竟有几位,当然也可以用一个循环先判断结果的位数,我这里采用的是从低位到高位进行判断,从低到高将数存进数组,需要注意的是,数组里的数的顺序和将要输出的顺序是相反的,因此需要从后往前打印,代码如下:

#include <stdio.h>
int abs(int i){
    if(i<0)
        i = -i;
    return i;
}
int main(){
    int a, b;
    int c;
    int temp[10];
    int i;
    int j = 1;
    scanf("%d", &a);
    scanf("%d", &b);

    /*if(b<-1000000 || b>1000000 || a<-1000000 || a>1000000)
        return -1;*/
    
    c = a + b;

    for(i=0; i<10;i++){
    	if(j%4 == 0)
    		temp[i] = 10;
    	else{
    		temp[i] = c % 10;
        	c /= 10;
		}
    	j++;
        if(c == 0)
            break;
    }
	if(a+b < 0){
		printf("-");
	}
    for(; i>=0;i--){
    	if(temp[i] == 10)
    		printf(",");
    	else
        	printf("%d", abs(temp[i]));
    }

    return 0;
}

至于逗号,我是用的是在需要加逗号的地方,给最终的数组赋值为10,输出的时候,遇到10就打印逗号就行。整个程序时间复杂度为0(n)。
如果遇到更加优秀的方法,学会了再来此贴更新。
嗯!


转载:https://blog.csdn.net/weixin_43857778/article/details/101468780
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场