PAT-A 1001. A+B Format (20)

题目链接在此

思路还是比较简单的,但是需要注意:

  1. 举个例子说明正确的记法:9,999(正确) 999,9(错误)
    也就是逗号的输出,需要注意。
    这一点上,首先要明确输出逗号的位置,输出逗号的位置应该是在从个位开始,每向高位方向输出三个数字之后,输在这第三个数字之前输出一个逗号,也即,从个位起,在位序(从个位的0开始)为3的倍数的后面输出一个逗号。故只需要知道当前位序 i 相对于个位(个位位序为0)的位序K是多少就可以判断何时输出逗号。 得出一个规律:K = num-1-i(num是a+b结果的位数,i从0开始)。

    这一点很像 PAT-B 1048. 数字加密(20)这个题目中位序奇偶的判断,可以看看,想想。据说姥姥出的题简单直观,但是要拿满分很难,当真如此。

  2. 最后一个数的后面不输出逗号,例如:999,999,
  3. 不同的方法以及他们的优劣在代码注释中已经给出
#include<stdio.h>
#include<math.h>
#include<string.h>

int str[110];

int main(){

    int a,b;
    scanf("%d %d",&a,&b);

    int res = a+b;

    if(abs(res) < 1000){
        printf("%d\n",res);
    }else{
        if(res<0){
            printf("-");
            res = -res;
        }

        //将int型res转换到int型数组str中
        int num = 0;
        while(res!=0){
            str[num++] = res%10;
            res /= 10;
        }

        //翻转str数组
        for(int i = 0;  i < num/2; i++){ //不能写成i<=num/2 
            int temp = str[i];
            str[i] = str[num-1-i];
            str[num-1-i] = temp;
        }

//      //也可用sprintf代替以上(放到int数组中再翻转过程) 
//      sprintf(str,"%d",res); 
//      int num = strlen(str);
        //但是记得str数组定义成char型,输出的时候控制格式改为%c 

        int count = 0;
        for(int i = 0 ;  i < num; i++){
            printf("%d",str[i]);
            if( (num-1-i)%3==0 && count<(num-1)/3){ //或者把后面这个条件换成i<num-1 
                printf(",");
                count++;
            }
        }   

        //法二:不翻转,直接倒序输出,此时的“,”的输出更好控制 
//      for(int i = num-1; i >= 0; i--){
//          printf("%d",str[i]);
//          if(i%3 == 0 && i>0) printf(",");
//      }

    }

    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值