#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)是三的整数倍且不是最后一位数字(末尾位置当然不能加逗号啦),因此,打印输出逗号,其他情况以此类推,相当于是枚举了所有情况。当然此方法仅供参考,当然还可以有其他方法,比如先把数字转换成字符串,然后在数组里对逗号进行处理也是可以滴。
总结一下,这题看似简单实则细节满满,一不小心就会出错,谁能猜到我这一题写了半天才全部测试正确呜呜呜,如果有其他方法或者我这代码有啥不对的地方,欢迎留言!