题目链接
《算法笔记》上面的参考答案如下:
#include <cstdio>
int num[10];
int main(){
int a,b,sum;
scanf("%d%d",&a,&b);
sum=a+b;
if (sum<0){
printf("-");
sum=-sum;
}
int len=0;
do {
num[len++]=sum%10;
sum/=10;
}while (sum);
for (int k=len-1; k>=0; k--){
printf("%d",num[k]);
if (k>0 && k%3==0) printf(",");
}
}
思路很明确,将数字转换成字符串,在加一定条件输出。但其实数字转换成字符串不需要这么复杂。有一个专门的函数sprintf(),就在stdio.h的头文件里面声明的。
14行代码方案:
#include <cstdio>
#include <cstring>
int main(){
int a,b;
scanf("%d %d",&a,&b);
char str[20],ans[30];
sprintf(str,"%d",a+b);
int len=strlen(str),num=1;
for (int i=1; i<=len; i++){
ans[num++]=str[len-i];
if (i%3==0 && i!=len && str[len-i-1]!='-') ans[num++]=',';
}
for (int i=num-1; i>0; i--) printf("%c",ans[i]);
}
我的思路是,用sprintf()将数字转换成字符串str,然后对str加工得到ans数组,ans数组逆向输出就是答案。