PTA 1001 A+B Format 简单的暴力+循环实现

#include<stdio.h>
#include<math.h>
int cifang(int x,int y){//这里的函数是计算x^y,其实可以直接用函数库的pow函数
    int i=0,sum=1;
    for(i;i<y;i++){
        sum*=x;
    }
    return sum;
}


int main(){
    int a,b,sum,d,n=1,q,p;//q暂存各位数字,p暂存10^x
    scanf("%d %d",&a,&b);
    sum=a+b;
    d=abs(sum);
    for(int i=10;;i*=10){//计算加和结果的位数,用于确定输出循环次数
        if(d/i>0){
            n++;
        }
        else break;
    }
    if(sum<0) printf("-");
    int c=n;
    for(int j=1;j<=c;j++){//三种情况,第一个逗号前面的数字个数只能是1、2和3
        if(c%3==0){//xxx,xxx,xxxx型
            p=cifang(10,n-1);
            q=d/p;//获取当前最高位数字
            d=d%p;//每次更新d为去掉高位后剩下的数值部分
            n--;
            printf("%d",q);
            if(j%3==0&&j!=c)
                printf(",");
            }
    else if(c%3==1){//x,xxx,xxx型
            p=cifang(10,n-1);
            q=d/p;
            d=d%p;
            n--;
            printf("%d",q);
            if((j+2)%3==0&&j!=c)
                printf(",");
            }
    else if(c%3==2){//xx,xxx,xxx型
            p=cifang(10,n-1);
            q=d/p;
            d=d%p;
            n--;
            printf("%d",q);
            if((j+1)%3==0&&j!=c)
                printf(",");
            }
    }
    return 0;
}

        首先根据题目求出a+b的值,然后想到既然要加逗号,那么得把各各位的数字拆开一个一个输出,并在适当位置插入逗号,因此要先求出有多少位才能确定一个一个输出时的循环次数(如果位数小于等于3,则无需加逗号处理,直接输出即可)。其次加逗号无非就三种情况(x,xxx   xx,xxx   xxx,xxx),每一种情况在for循环到达特定位置时输出逗号即可,比如去1,234这种情况,当j=1时,先输出最高位数字1,然后j变成2,此时(j+1)是三的整数倍且不是最后一位数字(末尾位置当然不能加逗号啦),因此,打印输出逗号,其他情况以此类推,相当于是枚举了所有情况。当然此方法仅供参考,当然还可以有其他方法,比如先把数字转换成字符串,然后在数组里对逗号进行处理也是可以滴。

总结一下,这题看似简单实则细节满满,一不小心就会出错,谁能猜到我这一题写了半天才全部测试正确呜呜呜,如果有其他方法或者我这代码有啥不对的地方,欢迎留言!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值