先打字分析,分析出思路后再写代码
基本思路:
1.先算出相加的结果,分结果的正负进行操作
2.转换字符串和加’,‘同时进行
3.如何实现加入’,’
#include<iostream>
#include<cmath>
#include<cstdio>
#include<stdlib.h>
using namespace std;
int main()
{
long long int a,b;
cin>>a>>b;
int cnt=0;
bool s=false;
long long int c=a+b;
//加和
if(c>=0)s=true;
if(c==0)
{
printf("0");
return 0;
}
c=abs(c);
char cc[200];
int num[200];
//printf("hi\n");
int jilu=0;
while(c!=0)
{
num[jilu++]=c%10;
cnt++;//数组长度
c/=10;
}
//转换成数组
/*
for(int i=0;i<cnt;i++)
{
cout<<num[i]<<endl;
}
*/
// printf("he\n");
if(s){
int num3=0;
if(cnt%3==0)
{
num3=0;
}
else
{
num3=3-cnt%3;
}
int j=0;
for(int i=cnt-1;i>=0;i--)
{
num3++;
if(num3==3)
{
cc[j]=num[i]+'0';
num3=0;
if(i!=0)
{
j++;
cc[j]=',';
}
//cout<<"do it"<<endl;
}
else
{
cc[j]=num[i]+'0';
}
j++;
}
cc[j]='\0';
}
//整数操作
else
{
// cout<<"do there"<<endl;
//int num3=3-cnt%3=3?0:3-cnt%3,j=1;
int num3=0,j=1;
if(cnt%3==0)
{
num3=0;
}
else
{
num3=3-cnt%3;
}
cc[0]='-';
// printf("first is%c\n",cc[0]);
for(int i=cnt-1;i>=0;--i)
{
num3++;
if(num3==3)
{
cc[j]=num[i]+'0';
num3=0;
if(i)
{
j++;
cc[j]=',';
}
}
else
{
cc[j]=num[i]+'0';
}
j++;
}
cc[j]='\0';
}
//负数操作
printf("%s\n",cc);
//printf("%c\n",cc[0]);
}
标解:
用to_string()函数进行数组转字符串,再通过insert()函数插入符号’,’
对于正数和负数两种情况可直接在输出时控制输出,不占内存且快
#include<iostream>
#include<string>
#include<cmath>
using namespace std;
int main(){
int a,b;
cin>>a>>b;
int sum=a+b;
string str=to_string(int(fabs(sum)));
int k=1;
for(int i=str.length()-1;i>0;--i){
if(k==3){
str.insert(i,",");
k=1;
i--;
}
++k;
}
if(sum<0)cout<<"-";
cout<<str;
}